Vite 依赖预构建为什么总在启动时重新执行? 程序猿智越 提问于 2026-03-13 13:41:17 阅读 54 前端 我用 Vite 搭了个 React 项目,每次 npm run dev 启动时都会看到 “Pre-bundling dependencies” 的提示,明明之前已经跑过一次了,为什么还会重新预构建?是不是我哪里配置错了? 我试过删掉 node_modules/.vite 目录再重装依赖,但下次启动还是照样预构建。有些依赖比如 lodash 和 axios 明明没变,却每次都花好几秒处理,开发体验有点卡。 依赖预构建开发工具 我来解答 赞 13 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 司马钰莹 Lv1 这个问题挺常见的,不是你配置错了,是 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 加载更多 相关推荐 1 回答 52 浏览 Vite 启动时为什么总在重复预构建依赖? 我最近用 Vite + React 开发项目,每次重新启动 dev server 的时候,控制台都会花好几秒重新预构建一堆依赖,比如 react、lodash 这些。明明没改过 node_module... 司马新杰 前端 2026-03-14 18:55:21 2 回答 76 浏览 Vite预构建时报错“Missing package”,但依赖明明已安装怎么办? 最近在用Vite开发项目,每次启动时预构建依赖都会卡住,报错说“Missing package: ‘@vue/reactivity’ required by ‘my-vue-app’”。但packag... ♫胜捷 前端 2026-02-15 23:01:32 1 回答 34 浏览 Vite预构建为啥没把我的第三方库缓存下来? 我用 Vite 开发时发现每次启动都重新预构建 lodash,明明之前已经 build 过了,按理说应该走缓存才对。是不是我哪里配置错了? 我试过删 node_modules 和 .vite 重新装,... Mc.志丹 优化 2026-03-11 11:06:19 2 回答 99 浏览 Vite SSR配置时为什么服务启动后无法加载CSS文件? 在用Vite+Vue3搭建SSR项目时,按照官方文档配置了服务端入口和客户端入口,但启动后页面样式完全失效。明明在客户端入口文件里正常导入了main.css,服务端返回的HTML里却看不到内联的样式块... 设计师子豪 工具 2026-02-02 06:03:33 2 回答 126 浏览 Vite预构建后依赖包体积反而变大了怎么办? 我在项目里给某个第三方库用了vite optimizeDeps预构建,结果打包后的vendor.js比之前还大200kb,这是怎么回事? 之前配置是这样的: optimizeDeps: { entri... Mr-培静 优化 2026-01-30 09:37:28 2 回答 63 浏览 Vite 打包后 HTML 中的静态资源路径为什么不对? 我用 Vite 构建项目后,发现生成的 index.html 里引用的 JS 和 CSS 文件路径是相对路径,部署到子目录时就加载不到了。明明配置了 base 路径,但好像没生效? 比如我的项目部署在... 轩辕梦玲 前端 2026-03-16 07:46:23 1 回答 25 浏览 Vite 里怎么自定义 esbuild 的配置? 我最近在用 Vite 搭项目,发现它默认用 esbuild 做依赖预构建和 TS 转译,但我想改一下 esbuild 的 target 或加个 loader,试了直接在 vite.config.js ... Mr.俊娜 前端 2026-03-14 17:05:15 1 回答 32 浏览 为什么 Vite 启动后修改 React 组件不热更新? 我用 Vite 搭了个 React 项目,但改完组件代码保存后页面没自动刷新,得手动 F5 才能看到变化。控制台也没报错,HMR 日志看着正常。是不是哪里配置错了? 我的组件写法如下: import ... 景源 Dev 前端 2026-03-07 22:02:20 2 回答 38 浏览 Vite打包库时为什么第三方依赖会被包含进输出文件? 我用Vite的Library模式打包一个React组件库,但发现打包后的文件包含了react-i18next的代码,明明在vite.config里设置了external排除。试过调整optimizeD... 萌新.一鸣 工具 2026-02-18 16:19:26 2 回答 86 浏览 为什么Vite处理Sass比Webpack慢那么多? 我在给旧项目迁移到Vite时发现奇怪的现象,同样的Sass文件用Vite构建反而比原来的Webpack更卡顿。比如这个带变量和嵌套的CSS: :root { --primary: #3498db; -... 设计师奕森 前端 2026-02-10 21:34:31
Vite 判断是否需要重新预构建,主要看这几个文件的 mtime(修改时间):package.json、lock 文件、vite.config。问题大概率出在 lock 文件上——npm 或者 yarn 每次 install 时可能会更新 lock 文件的时间戳或者内容,导致 Vite 认为依赖变了,然后就重新预构建。
还有个常见原因:有些依赖包自己内部文件的时间戳不稳定,或者 node_modules 结构每次 install 后有细微差异,Vite 就会保守地重新预构建。
解决方案:
在 vite.config 里加上 force 选项,强制预构建:
加上 force: true 后,Vite 会跳过 mtime 检查,强制使用缓存。只有当你手动删掉 node_modules/.vite 或者改动了 optimizeDeps.include 列表时才会重新构建。
如果还想更快,可以把不常变的依赖都放进 include 里。不过说实话,如果项目不大,每次多这几秒其实也还好忍忍就过去了。
解决办法是在 vite.config.js 里用 optimizeDeps.entries 明确指定入口文件,或者用 include 把需要预构建的依赖固定下来:
另外检查一下 node_modules 下面有没有通过 symlink 引入的依赖,有的话用 yarn link 或 npm link 的那个包每次都会被当成新的。