1398 字
7 分鐘

Vite 出現 error while updating dependencies 怎麼修?先查快取與 linked package

Vite 開發伺服器顯示 error while updating dependencies 時,先不要刪除 lockfile 或整個 node_modules。這通常是 dev server 的 dependency pre-bundling 沒有完成,常見邊界包括 node_modules/.vite 快取、linked package、lockfile/設定變更、ESM/CommonJS 格式和檔案路徑大小寫。

最短排查路徑是:停止 dev server → 用 vite --force 重建預先打包 → 若仍失敗,再檢查 linked package 和 optimizeDeps → 最後才清除 Vite 快取。這篇的命令與判斷以官方文件為準;沒有在本機重現你的錯誤,所以不會把單一 GitHub issue 當成所有案例的根因。

先判斷錯誤發生在哪個階段#

先保留完整錯誤訊息,並回答:

問題判斷
只有 pnpm dev 失敗,pnpm build 成功優先查 dev dependency pre-bundling 與瀏覽器快取
build 與 dev 都失敗先查 import、ESM/CommonJS、路徑大小寫或真正的套件錯誤
安裝 linked workspace package 後才出現優先查 optimizeDeps.include、套件輸出格式與依賴圖
只有某台電腦或某個 branch 失敗比對 lockfile、Node/pnpm 版本、OS 路徑與殘留 .vite 快取

先做不改 lockfile 的診斷:

Terminal window
pnpm why <suspected-package>
pnpm list vite --depth 0
git diff -- package.json pnpm-lock.yaml vite.config.*

第一步:強制重建 Vite 預先打包#

Vite 只在 dev 使用 dependency pre-bundling,產物預設放在 node_modules/.vite。官方建議在依賴或 lockfile 變更後使用 --force,讓 Vite 忽略既有的 optimized dependency cache:

Terminal window
pnpm exec vite --force

如果專案的 dev script 已經啟動 Vite,可以把參數傳進去:

Terminal window
pnpm dev -- --force

瀏覽器也可能保留舊的 optimized dependency 回應。重新開啟 DevTools,暫時勾選 Disable cache,再重新載入頁面。這一步只清理/重建 Vite 的 dev 預打包,不會替你修正真正的 import 或套件格式錯誤。

第二步:檢查 linked package 是否被預先打包#

Vite 對 node_modules 外的 linked package 不一定會自動預先打包。這在 pnpm workspace、pnpm link 或 monorepo 中很常見;linked package 如果不是 ESM,也可能需要明確加入 optimizeDeps.include

import { defineConfig } from 'vite';
export default defineConfig({
optimizeDeps: {
include: ['linked-package'],
},
});

接著檢查 linked package 的 package.json

  1. exportsmainmodule 是否指向實際存在的檔案。
  2. dev 時是否輸出 ESM;若只有尚未編譯的 TypeScript,是否需要先啟動 package build 或設定正確的 source entry。
  3. package 依賴是否真的寫在自己的 dependencies,而不是只靠 workspace 根目錄碰巧提供。
  4. 是否因為 package 名稱、import path 或檔案大小寫在 macOS 可用,到了 Linux 才失敗。

如果是一般 CJS dependency,不要把它任意放進 optimizeDeps.exclude;Vite 官方設定文件特別提醒,CJS dependency 排除後可能留下瀏覽器無法直接使用的格式。

第三步:把 ENOENT rename 當成症狀,不是結論#

某些 Vite issue 會看到類似以下訊息:

error while updating dependencies
Error: ENOENT: no such file or directory, rename .../node_modules/.vite/deps_temp .../node_modules/.vite/deps

這代表更新 optimized dependency 時發生檔案操作錯誤,但不單獨證明根因一定是權限、某一個套件或 Vite 本身。先用 --force 重建,再從完整 log 查是誰觸發重新掃描;如果每次都在同一個 linked package 或同一個 import 失敗,應修正依賴圖,而不是反覆刪 cache。

可以在停止 dev server 後只移除 Vite 的快取目錄:

Terminal window
rm -rf node_modules/.vite
pnpm dev

這個命令的目標是明確的 Vite cache,不是整個 node_modules,也不是 pnpm-lock.yaml。若專案有多個 package,確認你刪除的是實際啟動 dev server 的 workspace 目錄。

第四步:檢查 lockfile、config 與 ESM 邊界#

Vite 會把 lockfile、Vite config 和 NODE_ENV 納入 cache 判斷。以下變更都可能觸發重新掃描或暴露舊問題:

  • lockfile 更新但沒有重新安裝。
  • vite.config.* 改了 alias、plugin、resolveoptimizeDeps
  • package 從 ESM 改成 CJS,或反過來。
  • import 的檔名大小寫與實體檔案不同。
  • 在 config 中使用 Node-only API,卻把它當成瀏覽器依賴處理。

依序執行:

Terminal window
pnpm install --frozen-lockfile
pnpm exec vite --force
pnpm build

如果 pnpm install --frozen-lockfile 失敗,先修正 lockfile 與 package manifest 的一致性;不要在排查 dev server 時順便重新解決所有相依版本。若只有 build 失敗,再轉向 Vite 自訂 chunking 的建置檢查;它和 dev dependency cache 是不同問題。

怎麼確認修好了#

修正後不要只看 dev server 不再報錯,至少依序驗證:

  1. 冷啟動 dev server,確認第一次 dependency scan 能完成。
  2. 重新載入頁面,確認 optimized dependency 不再反覆更新。
  3. 修改一個 linked package,確認 HMR 或重新載入行為符合預期。
  4. 執行 pnpm build,確認 production bundling 沒有新增 import error。
  5. 用乾淨 checkout 或 CI 跑一次,排除本機 .vite cache 偶然掩蓋問題。

如果專案本身還在整理環境變數與 Vite config,可以搭配 Vite 環境變數與 mode 設定 檢查 NODE_ENV.env 與 config 讀取時機,不要把所有差異都塞進 optimizeDeps.include

常見問題#

Q: 直接刪除 node_modules 再安裝最快嗎?#

A: 有時能暫時消失,但它會掩蓋真正的 linked package、lockfile 或 ESM 問題。先用 vite --force,再只清除 node_modules/.vite;只有在安裝本身損壞且已保存 lockfile 的情況,才考慮更大範圍的重裝。

Q: optimizeDeps.include 加越多越好嗎?#

A: 不是。只加入 Vite 無法從依賴圖正確發現、但 dev 時確實要載入的 linked package 或深層 import。過度 include 會增加掃描時間,並讓設定更難維護。

Q: pnpm build 成功,為什麼 dev 還是會報錯?#

A: production build 和 dev dependency pre-bundling 是不同流程。dev 會處理瀏覽器載入、HMR、optimized dependency cache 和 linked package;build 成功只能排除部分 bundler 問題,不能證明 dev cache 已正常。

參考資料:

Vite:Troubleshooting

Vite:Dependency pre-bundling

Vite:Dependency Optimization Options

Vite GitHub issue:error while updating dependencies

Vite 出現 error while updating dependencies 怎麼修?先查快取與 linked package
https://laplusda.com/posts/vite-error-updating-dependencies/
作者
Zero
發佈於
2026-09-23
許可協議
CC BY-NC-SA 4.0