5月27日 00:59

Vite 为什么启动这么快?

Vite 之所以快,核心就两点:开发阶段不打包 + 按需编译

传统打包工具(Webpack 等)在启动时会把整个应用打包一次,项目越大越慢。Vite 反过来,利用浏览器原生支持的 ES Module,让浏览器按需请求模块——只有被用到的文件才会被编译。加上 Vite 用 esbuild(Go 写的)做依赖预构建,速度比 JS 打包器快几十倍。

HMR 方面也是模块级别的:改了哪个文件,只重新编译那个文件和依赖它的链,不是整体刷新。

一句话:传统打包工具是把整个项目"煮好"再上菜,Vite 是你点什么它现做——启动当然快。

追问

Vite 生产环境还是用 Rollup 打包的,那开发快有什么用?

开发体验直接影响效率。你一天可能启动几十次 dev server、改几百次代码,每次快几秒加起来就是大量时间。生产打包只在 CI 里跑一次,慢点无所谓。而且 Vite 生产构建用的是 Rollup,本身也比 Webpack 快。

esbuild 这么快,为什么生产环境不用它打包?

esbuild 快是因为它功能少——不支持 AST 操作、不支持插件生态里那些复杂转换。Vite 用 esbuild 做依赖预构建(只需要转译),用 Rollup 做生产打包(需要 Tree-Shaking、代码分割、插件等),各取所长。

实际项目从 Webpack 迁移到 Vite 遇到过什么坑?

  • CommonJS 依赖可能不兼容,需要配置 optimizeDeps.include
  • require.context 这种 Webpack 特有的 API 不能用了
  • CSS Modules 的导入方式有差异(.module.css 后缀强制要求)
  • 环境变量从 process.env.X 变成 import.meta.env.X

为什么 Vite 不用 webpack 的 bundleless 方案(如 Snowpack)?

Snowpack 已经停止维护了。Vite 和 Snowpack 思路类似,但 Vite 胜在:依赖预构建(esbuild)、开箱即用的 HMR、更完善的插件体系(兼容 Rollup 插件)。生态和社区活跃度完全不在一个量级。

标签:前端