Vite 冷启动快的核心是“做得更少”:不打包整个项目,仅按需编译浏览器请求的模块;通过精准依赖预构建、收敛文件监听、主动管理缓存等优化减少预处理负担。

Vite 的冷启动快,核心不是“做了更多”,而是“做得更少”——它不打包整个项目,只在浏览器真正请求某个模块时才编译它。优化方向也围绕这个逻辑展开:减少首次启动的预处理负担、提升缓存命中率、避免不必要的解析和监听。
依赖预构建配置要精准
第三方依赖(如 lodash、axios)默认会被 Vite 自动预构建为 ESM 并缓存到 node_modules/.vite。但自动分析有时会漏掉深层依赖或动态引入的包,导致运行时才触发编译,拖慢首屏加载。
- 显式声明高频依赖:
optimizeDeps.include可提前锁定常用包,避免运行时临时解析 - 排除内部未发布包:
optimizeDeps.exclude防止 Vite 尝试处理本地 monorepo 中尚未构建的模块 - 首次启动后留意控制台日志,若频繁出现
... is not pre-bundled提示,就说明该模块需要加入include
源码层按需处理,不碰就不转
Vite 默认只对被浏览器实际请求的文件做转换(比如访问 /src/App.vue 才触发 @vitejs/plugin-vue),但某些配置可能打破这一原则:
- 避免在
vite.config.js中用defineConfig同步读取大量源码(如遍历src/pages自动生成路由) - 禁用不必要的插件:例如项目不用 JSX,就别留
@vitejs/plugin-react-swc;不用 SSG,就关掉vite-plugin-ssg - TypeScript 类型检查不参与启动流程,但若启用了
esbuild以外的 TS 转译(如通过ts-node加载配置),会显著拖慢初始化
文件监听范围要收敛
Vite 启动后会用 chokidar 监听项目文件变更。大型仓库中,无差别监听 node_modules、dist、logs 等目录会占用大量内存和 CPU。
- 在
server.watch中明确ignored排除无关路径,例如['**/dist/**', '**/logs/**', '**/temp/**'] - 若开发环境是 Docker 或 WSL,可启用
usePolling: true提升兼容性,但仅在必要时开启(它更耗资源) - 确保项目根目录干净,避免隐藏大文件(如
.git历史过大、未忽略的视频素材)影响监听性能
缓存管理要主动
依赖预构建缓存(node_modules/.vite)是提速关键,但它不会自动清理过期内容,尤其在频繁切换分支或重装依赖时容易失效。
- 每次
npm install或yarn install后,Vite 通常能自动检测依赖变更并重建缓存 - 若发现启动变慢且控制台提示
Optimizable dependencies changed,可手动删掉node_modules/.vite目录再启动 - CI/CD 中建议保留
node_modules/.vite缓存(与node_modules一同缓存),避免每次构建都重跑预构建
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











