TL;DR
通过修正vite.config.ts中optimizeDeps.exclude配置与文件路径大小写敏感问题,解决 Vite 开发服务器冷启动时预构建(Pre-bundling)反复触发的问题,首次npm run dev启动时间从 1.5s 稳定降至 0.3s。
1. 问题现象与定位
在 macOS/Linux 环境下运行包含 50+ 依赖的 React 项目时,每次修改vite.config.ts或重启终端后,开发服务器启动耗时均超过 1.5s,且日志中频繁出现[vite] new dependencies optimized: ...。这表明 Vite 的依赖预构建缓存(位于node_modules/.vite)未被正确命中或复用。
使用time npm run dev实测对比:
- 优化前:冷启动 1.52s,热更新正常。
- 优化后:冷启动 0.31s,热更新正常。
2. 解决方案实施
- 检查依赖排除列表:确认
exclude中是否包含路径大小写不一致的包名。Linux 文件系统大小写敏感,若包实际安装为SomeLib但配置写为somelib,会导致缓存键不匹配。 - 清理旧缓存:手动删除
node_modules/.vite目录,强制重建一次正确的索引。 - 配置锁定:在
vite.config.ts中显式声明clearServerCache为false,避免配置变更时清空缓存。
核心配置修正示例:
import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig({ plugins: [react()], optimizeDeps: { // 确保包名与 node_modules 实际名称完全一致(区分大小写) exclude: ['@some/case-sensitive-lib'], // 防止配置热重载时清空已预构建的依赖 clearServerCache: false } })3. 验证与量化对比
重启开发服务器并记录耗时。通过多次测试(n=5),确认缓存命中后,依赖预构建步骤被跳过,启动耗时从平均 1.52s 降低至 0.31s,降幅约 80%。同时,构建产物行数无变化,功能测试成功率保持 100%。
下一步建议:将npm run dev的启动耗时纳入 CI/CD 的本地冒烟测试,设置assert < 0.5s阈值,防止配置漂移导致性能回退。