名字想费脑的坤宝
发布于 2026-08-30 / 1 阅读
0
0

理解 Vite 的依赖预构建

第一次启动 Vite 项目时,控制台里那行 Pre-bundling dependencies 到底在做什么?这篇是我读完源码后的整理。

为什么需要预构建

浏览器原生 ESM 不支持 CommonJS,而 node_modules 里大量包还是 CJS。另外像 lodash-es 这样的包有几百个模块文件,浏览器会发出几百个请求。

Vite 用 esbuild 把每个依赖打包成单文件,顺便把 CJS 转成 ESM。

缓存放在哪

node_modules/.vite/deps,缓存 key 由 lockfile、config 和 NODE_ENV 计算得出。这几个东西不变就不会重新构建。

什么时候需要手动干预

  • 依赖里有动态 require,esbuild 分析不出来:加 optimizeDeps.include
  • 新增依赖后不想重启:optimizeDeps.force 或者删缓存重启
  • 本地 link 的 monorepo 包:默认不预构建,需要显式写进 include

一点体会

预构建本质是一次「依赖不变、业务常变」的分层。想清楚哪些东西变化频率低,构建速度的问题就解决了一半。


评论