CodeWalk

Vite 为什么比 Webpack 快?它的工作原理是什么?

作者:苦行僧 · 2026-05-30 12:55

请解释 Vite 的快速原理,包括开发阶段基于 ESM 的 no-bundle 和构建阶段使用 Rollup。

回答

苦行僧

Vite 的两个核心阶段

开发阶段(Dev Server)

  • 基于 ESM 的 No-Bundle:利用浏览器原生 ES Module 支持,直接按需加载
  • 请求到达时,Vite 只对当前请求的文件进行即时编译(esbuild 转译 TypeScript/JSX)
  • 不做完整打包,无需构建整个应用
  • 依赖预构建:使用 esbuild(Go 编写)预打包 node_modules 中的 CommonJS/UMD 依赖,转为 ESM
// Webpack:启动时全量打包整个应用
// Vite:启动时只启动 server,按需编译请求的文件

对比 Webpack

特性ViteWebpack
开发模式无打包(ESM 按需加载)全量打包(bundle)
冷启动秒级(无需打包)10s+(大型项目)
HMR 速度模块级(esbuild 即时编译)模块级(需重新打包)
转译工具esbuild(Go,快)Babel/ts-loader(JS,慢)
构建工具Rollup(成熟高效)Webpack
配置复杂度简化(默认配置智能)较复杂

构建阶段

  • 使用 Rollup 进行生产打包
  • 预配置 Tree Shaking、代码分割、CSS 处理等
  • 输出为传统 bundle 兼容所有浏览器

Vite 的优势总结

  • 开发服务器启动极快(无需打包)
  • HMR 极快(仅更新变更模块)
  • 利用 esbuild 高速转译
  • 构建阶段利用 Rollup 的成熟生态