传统打包式 dev server 必须先构建整个应用的依赖图才能启动,项目越大越慢;Vite 利用浏览器原生 ESM:入口直接交给浏览器,浏览器按 import 链发请求,Vite 只对当前请求到的模块做按需编译,启动时间与项目规模基本无关。

Vite 把模块分两类处理:node_modules 依赖用 esbuild 预构建——合并成少量文件、把 CJS 转 ESM,Go 编写的 esbuild 比 JS 打包快一两个数量级;源码通过浏览器请求按需 transform(TS 转译、SFC 编译),配合 304 与强缓存。改一个文件只需让对应模块失效,HMR 边界精确。易错点:首屏大量请求可能有瀑布问题,预构建正是缓解手段;部分 CJS 依赖要手动 optimizeDeps.include。追问:生产为何仍要打包、Rolldown 如何统一 dev 与 build。

// vite.config.js
export default { optimizeDeps: { include: ['lodash-es'] } }