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

科技 · 實用指南

npm ERESOLVE?使用 force 前先證明 peer dependency contract

保存 lockfile 與 error graph,找出 requester peer edge,修復 version range 交集,再以無 bypass 的 clean install 證明。

zh-TW npm ERESOLVE peer dependency graph diagram
原創編輯插畫: find the requester, peer range and selected version. Watch at Ease

ERESOLVE 是 dependency graph 結論,不是 cache 損壞證明。訊息通常列出 selected version、requester 與無法並存的 peer range。

保存 manifests、lockfile 與完整 report,重建 demanding edge,修復最小 contract,再以 npm ci、tree、build 與 tests 作退出證據。

改 tree 前凍結證據

保存 package.json、lockfile、workspace manifests、.npmrc、Node/npm versions、ERESOLVE report 與完整 command。不要先刪 lockfile。

依序讀 While resolving、Found、Could not resolve,把 project、selected version、requester 與 peer range 寫入 ledger。

證明 requester edge 與 range

用 npm explain、npm ls 與 npm view peerDependencies --json 分開證明 installed edge 與 registry contract。

比較 root range、peer range、selected version 與 overrides。空交集就選 compatible release;非空才檢查 lockfile、workspace、links、override 與 npm version。

修復 contract 而非靜音

使用 compatible release、協調升級或 documented override,並一起提交最小 manifest/lockfile diff。

legacy-peer-deps 完全忽略 peers,只可作 isolated diagnostic;force 更寬,也不是 exit criterion。

分開真衝突與 resolver 行為

在相同 Node、npm、.npmrc 與 registry 的 temporary clone 中重現。npm ci 不改 lockfile,失敗可保留證據。

若 ranges 相容卻只在一個 npm release 失敗,縮小 graph 並比較 adjacent releases,不要先假設 resolver bug。

要求可重現退出證明

fresh checkout 必須在無 bypass 下 npm ci 通過,tree 正確、diff 可解釋且 build/tests 通過。

若刻意保留 legacy policy,寫入 .npmrc、記錄 ignored contract 並添加 integration tests;它仍是 exception。

zh-TW npm ERESOLVE repair validation diagram
原創編輯插畫: repair the contract and prove a clean install. Watch at Ease