# vite原理:启动与构建流程

# 先看结论

Vite 的核心思想是:

  • 开发环境:利用浏览器原生 ESM,按需编译,不做整包打包
  • 生产环境:交给 Rollup 做完整打包优化

这就是它「开发快、生产稳」的底层原因。

# 开发启动时发生了什么

# 1)启动 Dev Server

vite dev 启动一个 Koa 风格中间件服务器(Connect 体系),监听请求。

# 2)浏览器先请求 index.html

Vite 会把 index.html 当作入口,不只是静态文件,还会注入 dev client:

  • HMR 客户端脚本
  • 资源路径重写逻辑

# 3)浏览器继续按 ESM 规则请求模块

例如 main.ts -> App.tsx -> utils.ts,浏览器会逐个发请求。
Vite 在服务端“实时转换”这些模块后返回。

# 4)依赖走预构建结果

像 react、vue 这类第三方依赖会先被 esbuild 预构建到 node_modules/.vite,避免反复解析 CommonJS 和深层依赖图。

# 为什么开发阶段更快

传统 bundler 启动时就要“全量打包”。
Vite 只转换浏览器当前访问到的模块,首屏只处理必要依赖,启动速度自然更快。

# 生产构建流程(vite build)

# 1)读取配置 + 插件

先把用户配置、插件链、环境变量全部归一化。

# 2)交给 Rollup 构建模块图

Rollup 做:

  • Tree-shaking
  • Chunk 划分
  • 代码压缩
  • 资源输出

# 3)输出 dist

生成带 hash 的 js/css/assets 文件,便于浏览器长期缓存。

# 开发与构建的职责分离

这点非常关键:

  • esbuild:快,适合开发期转译和预构建
  • Rollup:产物优化能力强,适合生产打包

Vite 不是二选一,而是把两者放到最合适的位置。

# 小结

理解 Vite 的关键不是背配置,而是理解这条主线:
开发期按需转换 + 生产期集中优化。
这一点决定了它和传统 webpack 全量编译模式的根本差异。