Vite 核心链路:开发、预构建与生产构建

面试题

Vite 为什么快?预构建解决什么问题?生产环境和开发环境有什么不同?

核心解答

开发环境不先把整个应用打成 bundle,而是通过原生 ESM 按 URL 提供源码模块;浏览器请求到哪个模块,Vite 才转换哪个模块。这样冷启动不需要等待全量打包。

依赖通常是 CommonJS、体积大且模块很多,Vite 会用 esbuild 扫描并转换为浏览器可加载的 ESM,同时合并请求、缓存到 node_modules/.vite。依赖版本或配置变化会使缓存失效,也可以用 --force 强制重建。

生产构建使用 Rollup,负责模块图、Tree Shaking、代码分割、压缩和产物输出。因此 Vite 的开发期是按需服务模块,生产期仍然是 Bundle。

相关边界

  • HMR 见 Vite HMR 原理:重点是模块图失效和更新协议。
  • 依赖缓存见本文,不再另设重复的“为什么快/依赖优化”文章。
  • 复杂插件开发见 Vite 插件机制