Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

npm ENOENT:建立 package.json 前先核實失敗路徑

保存精確錯誤路徑與呼叫者目錄,區分檢出檔案缺失、專案根、workspace 與啟動器問題。本機對照說明空清單不能修復原專案。

原創示意圖:保留精確缺失路徑、呼叫者、儲存庫清單與目標,再驗證原工作流程。這是解說圖,不是客戶執行紀錄。
原創示意圖:保留精確缺失路徑、呼叫者、儲存庫清單與目標,再驗證原工作流程。這是解說圖,不是客戶執行紀錄。 Watch at Ease

npm 回報 package.json 的 ENOENT 時,先保存它嘗試開啟的路徑。路徑組成部分缺失,可能來自目錄錯誤、檢出不完整或選到了另一個套件;這則訊息本身不能替你選擇修復方式。

我們在隔離的 Node v24.19.0/npm 11.9.0 環境區分根腳本、workspace 腳本、已追蹤卻缺失的清單與無關空清單,十項檢查通過。這些結果說明如何從路徑取證,沒有重現歷史 Windows --prefix 問題,也不保證安裝或 CI 建置通過。

保存失敗路徑與呼叫者

改檔案前複製 code、syscall、path 與完整命令,記錄呼叫者起始目錄、Node/npm 版本,以及啟動 npm 的 IDE 工作、CI 步驟或服務。保留磁碟代號、容器路徑與符號連結脈絡;需要分享時,再於副本隱藏私人路徑資訊。

將日誌與預期儲存庫及套件對照。npm 腳本的執行目錄可能不同於最初呼叫目錄:明確 prefix 對照在根套件內執行腳本,INIT_CWD 卻仍保留父目錄。因此,僅憑腳本的 cwd,無法重建原命令從哪裡啟動。

建立清單前先核對位置

從已確認的儲存庫根比較追蹤中的 package.json 路徑、所選提交、實際工作檔案與錯誤路徑。在 Git 中,從根執行 git ls-files -- package.json ':(glob)**/package.json' 可列出根與巢狀的受控清單。列出的路徑是索引證據,不證明檔案目前存在或位元組符合預期。

若目前檢出或產出成品應包含該清單,先保留本機修改,再按專案一般流程還原目標檔案。不要只為壓下這次錯誤就執行 npm init。自製對照移除工作副本後,Git 仍列出 package.json;還原原始位元組後,預期腳本才恢復執行。

選擇專案根或真實 workspace

讀取根 workspaces 設定與相關子套件清單。workspace 選擇器可以使用宣告套件名或路徑,最後一層資料夾名稱不一定就是套件名。npm v11 文件說明,在 workspace 內啟動時會選擇其執行脈絡,並將 prefix 設為 workspace 根。

對照的根套件宣告 packages/a,子套件清單名稱卻是 fixture-a。npm run probe --workspace=fixture-a 與進入該子套件執行 probe,都選中子套件腳本。猜測的 --workspace=a 則回報 No workspaces found,而非 ENOENT。應把新錯誤保留為另一分支,不要硬套缺檔診斷。

比較呼叫方式並限定版本

使用小型、已獲授權的重現,比較原啟動器與直接進入已核實套件、明確 workspace 選擇器或原 prefix 路徑。輸出起始與實際執行目錄;工具能提供時,記錄解析的清單。每次只改一種呼叫方式,比較時不要重設快取或替換清單。

公開 npm issue 7722 記錄特定舊 npm 版本在 Windows 的 --prefix install 失敗,以及 cd 或 ci 的變通回報。它以 not planned 關閉,不代表所有受影響版本均已修復。我們在 Linux/npm 11.9.0 執行 --prefix project run probe 成功,但只是腳本對照,不是 Windows npm install、相依解析或正式環境回歸測試。

只修復已證明的原因

目錄錯誤就定位預期套件;追蹤檔案缺失就修復檢出或產出成品;啟動器 cwd 錯就明確設定該工作目錄;workspace 選擇器錯就用核實的名稱或路徑。若與工具版本有關,先保存最小重現,再決定有限的版本或變通方案,不要把舊議題的辦法套給所有 ENOENT。

空目錄與缺失追蹤檔案的對照,都回報精確的 package.json 缺失路徑。在空目錄寫入 {} 後,路徑可讀了,卻出現 Missing script: probe,沒有還原原專案腳本或相依。這說明一則錯誤消失,遠弱於預期專案真正恢復。

要求原工作流程通過

回到原啟動器,使用預期版本與 workspace 目標,重跑原 install、ci 或腳本動作。保留呼叫目錄、清單身分、結束狀態、預期輸出或專案檢查。另一命令成功結束可作為比較證據,不能自動代表原失敗流程已完成。

十項檢查僅用 Linux、Node v24.19.0 與 npm 11.9.0 下新建的本機對照,執行受控探針腳本與追蹤檔案檢查,沒有安裝相依或存取網路。沒有重現 Windows、IDE、CI 服務、私人儲存庫或歷史 --prefix 回歸。連結的 npm v11 文件標示 Legacy,是特定版本分支,不代表最新 CLI。

原創示意圖:目錄錯誤、檢出不完整、workspace 目標與已重現工具回歸需要不同證據與動作;錯誤訊息本身不能替你選擇。
原創示意圖:目錄錯誤、檢出不完整、workspace 目標與已重現工具回歸需要不同證據與動作;錯誤訊息本身不能替你選擇。 Watch at Ease