vite启动慢主因是依赖预构建未覆盖深度esm包、插件同步阻塞及监听范围过大;需通过--debug定位耗时点,显式配置optimizedeps.include、移除config阶段同步操作、收紧watch.ignored。

Vite 开发服务器启动慢,通常不是“Vite 不快”,而是项目规模变大后,某些环节没被合理约束或缓存失效导致的。排查和优化要从冷启动过程的关键阶段切入,聚焦真实耗时点,而不是盲目加配置。
看日志,定位卡在哪一步
启动时加 `--debug` 参数,能暴露 Vite 内部各阶段耗时: ```bash vite --debug ``` 重点关注三类输出: - `Pre-bundling dependencies`:预构建是否卡住?是否反复执行? - `Loading config`:配置文件(尤其插件)是否做了同步阻塞操作? - `Transforming` + 文件路径:是否有大量 `.ts` 或 `.vue` 文件在首次请求时集中编译?如果看到某类模块(比如 @vueuse/core 的子模块、echarts 的组件)频繁出现在 transform 日志里,说明它们没被预构建覆盖,每次访问都重新解析。
依赖预构建没覆盖全,是常见根因
Vite 默认只预构建 `node_modules` 顶层包(如 `vue`),但像 `@vueuse/core`、`@ant-design/icons-vue` 这类深度嵌套的 ESM 包,不会自动进入预构建列表——结果就是每次启动都要逐个解析、转译、缓存,拖慢冷启动。解决方法是在 vite.config.ts 中显式声明:
export default defineConfig({
optimizeDeps: {
include: [
'vue',
'vue-router',
'pinia',
'@vueuse/core',
'@ant-design/icons-vue',
'lodash-es'
],
exclude: ['your-local-utils'], // 本地未发布包不预构建
esbuildOptions: { target: 'es2020' }
}
})
✅ 优势:首次预构建稍慢,但后续启动直接复用缓存,冷启动可从 5–8 秒降到 1 秒内。
⚠️ 注意:修改 include 后需删掉 node_modules/.vite 并重启,否则配置不生效。
别让插件和配置拖累启动
有些插件会在 `configResolved` 或 `buildStart` 阶段做同步扫描(比如遍历 src 下所有路由文件生成配置),或在启动时读取大量 JSON/YAML。这类操作会阻塞主线程。检查方式:
- 临时注释掉非核心插件(如
vite-plugin-svg-icons、vite-plugin-checker),看启动是否明显变快; - 把耗时逻辑移到
configureServer(开发服务器启动后)或handleHotUpdate(仅 HMR 时触发),而非config阶段。
常见高风险操作:
- 在
vite.config.ts里require('fs').readdirSync(...)同步读取千级文件; - 使用
glob.sync()扫描src/views/**/*.{vue,ts}; - TypeScript 类型检查插件(如
vite-plugin-checker)默认开启tsc,建议开发期设为enable: false,改用 IDE 实时提示。
文件监听范围过大也会拖慢
Vite 默认监听整个项目目录,但如果你的 `src` 里混着 `mock/`、`design/`、`docs/` 等非代码目录,或 `node_modules` 被错误包含,Chokidar 监听器会持续扫描无用路径,占用 CPU 和内存。在 vite.config.ts 中收紧监听:
server: {
watch: {
ignored: [
'**/node_modules/**',
'**/dist/**',
'**/mock/**',
'**/design/**',
'**/docs/**',
'**/coverage/**'
]
}
}
再配合系统级优化(如 macOS 上禁用 Spotlight 索引项目目录),可减少 20%–40% 的启动抖动。
不复杂但容易忽略。











