Vite 依赖预构建为什么总在启动时重新执行?

程序猿智越 阅读 54

我用 Vite 搭了个 React 项目,每次 npm run dev 启动时都会看到 “Pre-bundling dependencies” 的提示,明明之前已经跑过一次了,为什么还会重新预构建?是不是我哪里配置错了?

我试过删掉 node_modules/.vite 目录再重装依赖,但下次启动还是照样预构建。有些依赖比如 lodashaxios 明明没变,却每次都花好几秒处理,开发体验有点卡。

我来解答 赞 13 收藏
二维码
手机扫码查看
2 条解答
司马钰莹
这个问题挺常见的,不是你配置错了,是 Vite 的预构建检测机制在搞鬼。

Vite 判断是否需要重新预构建,主要看这几个文件的 mtime(修改时间):package.json、lock 文件、vite.config。问题大概率出在 lock 文件上——npm 或者 yarn 每次 install 时可能会更新 lock 文件的时间戳或者内容,导致 Vite 认为依赖变了,然后就重新预构建。

还有个常见原因:有些依赖包自己内部文件的时间戳不稳定,或者 node_modules 结构每次 install 后有细微差异,Vite 就会保守地重新预构建。

解决方案:

在 vite.config 里加上 force 选项,强制预构建:

// vite.config.js
export default {
optimizeDeps: {
include: ['lodash', 'axios'],
force: true,
},
}


加上 force: true 后,Vite 会跳过 mtime 检查,强制使用缓存。只有当你手动删掉 node_modules/.vite 或者改动了 optimizeDeps.include 列表时才会重新构建。

如果还想更快,可以把不常变的依赖都放进 include 里。不过说实话,如果项目不大,每次多这几秒其实也还好忍忍就过去了。
点赞
2026-03-13 17:11
♫淑芳
♫淑芳 Lv1
问题很可能是你的项目里有通过 npm link 或 monorepo 方式引入的本地依赖,这种情况下 Vite 无法正确生成稳定的缓存标识,所以每次都重新预构建。

解决办法是在 vite.config.js 里用 optimizeDeps.entries 明确指定入口文件,或者用 include 把需要预构建的依赖固定下来:

// vite.config.js
export default defineConfig({
optimizeDeps: {
include: ['lodash', 'axios'], entries: ['./src/main.jsx'] // 改成你的入口文件
}
})


另外检查一下 node_modules 下面有没有通过 symlink 引入的依赖,有的话用 yarn link 或 npm link 的那个包每次都会被当成新的。
点赞 1
2026-03-13 13:43