前端资源管理的痛点
项目里的 JS、CSS、图片越来越多,直接用 script 标签堆在一起:文件多、加载慢、变量冲突、依赖顺序难维护。构建工具把源码打包成少量优化过的静态文件,让浏览器加载更快。Vite 是新一代前端构建工具,用原生 ES 模块做开发服务器,启动与热更新都很快,上手也简单。
- HMR改代码立即热更新,不用刷新。
- 预构建依赖提前编译成 ESM。
- 代码分割按路由拆包,按需加载。
- 指纹产物文件名带哈希利于缓存。
Vite 开发服务器与 HMR
Vite 开发时不做整体打包,直接把源码按 ES 模块提供给浏览器,启动几乎秒开。改代码时 Vite 只更新变化的模块,热更新瞬间完成,状态还能保留,不用整页刷新。它按需编译,打开哪个页面才编译哪个,项目再大也不怕。
npm create vite@latest my-app -- --template react
cd my-app
npm install
npm run dev
HMR 对组件框架有专门支持,改样式文件基本无感;遇到模块不兼容或边界情况会退化成整页刷新,属于正常现象。
依赖预构建
第三方依赖大多是 CommonJS 格式,浏览器不认识;而且依赖内部 import 很多,请求数爆炸。Vite 启动时把依赖预构建成 ESM 并缓存在 node_modules 里,浏览器只需请求少量预构建文件,加载又快又稳。依赖升级后 Vite 会自动重新预构建。
// vite.config.js
export default {
optimizeDeps: {
include: ["lodash-es", "react"]
}
};
预构建缓存放在 node_modules/.vite 下,出现诡异加载问题先清缓存再试;依赖版本尽量锁定,避免预构建反复触发。
生产构建与代码分割
生产构建用 Rollup 把代码打包并压缩,产物默认带内容哈希文件名,方便缓存。Vite 默认按动态 import 做代码分割:路由懒加载的页面打成独立 chunk,首屏只加载需要的部分,其余按需请求。
const Home = lazy(function(){ return import("./Home.jsx"); });
构建后看产物体积报告,体积过大的 chunk 要排查:大依赖单独分包、公共代码提取、按需引入替代整包引入,都是常用手段。
静态资源处理
图片、字体、SVG 这类静态资源,Vite 会按引用方式处理:小于阈值的转成内联 base64 减少请求,大于阈值的输出成独立文件并加哈希。资源要放在 src 下通过 import 或相对路径引用,才能进构建管线;public 目录的文件原样拷贝不过处理。
import heroImg from "./assets/hero.png";
// 产物:/assets/hero-2a3f8c.png
图片优化建议配合构建流程:先压缩再入库,构建只负责搬运与哈希,别指望构建工具替你压缩图片。
构建优化与缓存
构建产物带哈希后可以放心设长缓存:内容变文件名就变,旧的缓存自然失效;内容没变文件名不变,命中缓存不用重下。为了让缓存命中率更高,把很少变的依赖单独打包,别和业务代码混在一起。
// vite.config.js
export default {
build: {
rollupOptions: {
output: {
manualChunks: { vendor: ["react", "react-dom"] }
}
}
}
};
CI 里构建产物最好缓存 node_modules 与构建缓存目录,重复构建会快很多;发版前跑一遍体积与警告检查,避免带病上线。
落地清单
- 开发用 Vite,享受秒开与 HMR。
- 依赖锁版本,预构建出问题先清缓存。
- 路由懒加载,首屏只载必要代码。
- 大 chunk 拆包,公共依赖单独 vendor。
- 资源走构建管线,产物带哈希设长缓存。
- CI 缓存依赖与构建目录,发版前查体积与警告。