Vite 在开发环境和生产环境使用不同的构建策略,这是为了在两个场景下都能提供最佳的性能和体验:
开发环境:
- 使用 esbuild 进行依赖预构建,esbuild 是用 Go 语言编写的,速度极快
- 直接利用浏览器原生 ES 模块(ESM)加载源代码,无需打包
- 通过 HTTP 服务器提供文件,浏览器按需请求模块
- 支持快速的热模块替换(HMR),只编译修改的文件
- 提供源码映射(Source Map)用于调试
生产环境:
- 使用 Rollup 进行打包和优化
- 执行代码分割(Code Splitting),将代码拆分成多个 chunk
- 进行 tree-shaking,移除未使用的代码
- 压缩和混淆代码,减小文件体积
- 生成优化的静态资源,包括 CSS 提取和压缩
- 生成 hash 文件名用于长期缓存
为什么使用不同策略:
-
性能优化:开发环境需要快速启动和响应,生产环境需要优化加载速度和运行性能
-
功能需求:开发环境需要调试功能和 HMR,生产环境需要优化和压缩
-
兼容性:生产环境需要考虑浏览器兼容性,可能需要转译和 polyfill
-
构建工具特性:
- esbuild:启动快,但优化功能不如 Rollup 完善
- Rollup:打包优化能力强,但启动速度较慢
配置差异:
- 开发环境:
vite命令启动开发服务器 - 生产环境:
vite build命令构建生产版本,vite preview预览构建结果
这种双模式设计让 Vite 在开发体验和生产性能之间达到了最佳平衡。