科技 · 實用指南
npm 出現 ETARGET?先證明 registry、版本範圍與已發布版本
「No matching version found」可能來自從未發布的版本、tag 或 range 不符、scope 私有 registry,或鏡像 metadata 過期。先定位缺少的匹配,再清 cache 或刪 lockfile。

npm 回報 ETARGET 或「No matching version found」時,先保留完整套件規格,並在 npm 真正使用的 registry 驗證。關鍵證據是請求者、registry endpoint、已發布版本集合與 dist-tag 對應,而不是刪除 cache 或 lockfile 後結果是否改變。
記錄精確規格與請求者
修改檔案前先複製完整 ETARGET 行。記錄套件名稱、精確版本、range 或 tag、npm 版本,以及請求來自 package.json、package-lock.json、workspace、產生器範本或傳遞依賴。在兩個清單搜尋完整套件名;若是傳遞依賴,用安裝 log 與依賴樹找出父請求者。
查詢 npm 實際使用的同一 registry
先執行 npm config get registry,再檢查專案、使用者與 CI npmrc 的 scope registry,但不要輸出 token。針對同一 endpoint 執行 npm view <package> versions --json 與 npm view <package> dist-tags --json。npmjs.com 看得到的版本不代表私有 registry 或 mirror 已提供。
區分精確版本、range 與 tag
4.2.1 這種精確要求必須真的發布;^4.2.1 這種 range 必須匹配 registry 回傳的至少一個版本;latest、beta、next 是可獨立移動的 dist-tag。同時比對 versions 與 dist-tags,不要把 Git tag、Node.js 版本或 GitHub release 當成 npm 套件版本。
檢查預發布與發布邊界
SemVer 中 3.0.0-beta.9 的優先序低於 3.0.0,兩個識別碼不能互換。如果 registry 只有預發布版,精確要求 3.0.0 仍沒有匹配。更改 range 前查看發布時間與 dist-tag,並保留失敗規格,確認版本是未發布、已撤回或暫時不可用。
分開稽核 manifest、lockfile 與 mirror
若同一 registry 的 npm view 看得到版本,就比較失敗的 CI 或 IDE 環境;registry、scope 對應、proxy 與 credentials 可能不同。接著在 package.json 和 package-lock.json 定位要求並判斷直接或傳遞來源。私有 proxy 應走管理員支援的 metadata refresh,不先刪 lockfile 或強制清 cache。
只修復已證明的錯配
版本從未存在時,依相容性修正範本或依賴並測試;dist-tag 指向意外版本時,使用已驗證版本或等待發布者;mirror 過期時刷新 mirror;只有 CI 不同時對齊 scope registry 且不洩漏 credentials。最後再次 npm view、安裝並審查 lockfile diff。
