Watch at Ease看见世界,读懂生活。

科技 · 实用指南

npm ERESOLVE?使用 force 前先证明 peer dependency 合同

保留 lockfile 和错误图,找出发起请求的 peer 边,修复版本区间交集,再用无绕过参数的干净安装证明结果。

zh-CN npm ERESOLVE peer dependency graph diagram
原创编辑插画: find the requester, peer range and selected version. Watch at Ease

ERESOLVE 是依赖图结论,不是缓存损坏的证明。错误通常会给出已选版本、请求方和无法共同满足的 peer 范围。

先保留 manifests、lockfile 与完整报告,再重建请求边,修复最小版本合同,并以 npm ci、依赖树、build 和 test 作为退出证明。

改树前冻结证据

保存 package.json、package-lock.json、workspace manifests、.npmrc、Node/npm 版本、完整 ERESOLVE 报告和准确命令。不要先删 lockfile 或缓存。

依次读取 While resolving、Found 与 Could not resolve dependency,把项目、已选版本、请求包和 peer 范围写成台账。

证明请求边与区间交集

对已存在的树运行 npm explain、npm ls 和 npm view package@version peerDependencies --json,分别证明已装边与 registry 合同。

比较根范围、peer 范围、已选版本和 overrides。若交集为空就选择兼容 release;若有交集,再检查 lockfile、workspace、file link、override 和 npm 版本。

修复合同而非消音

优先采用兼容 release、协调升级或有文档的 override,并一起提交最小 manifest/lockfile diff。

legacy-peer-deps 会完全忽略 peerDependencies,只能作为隔离诊断。结果变化说明 peer enforcement 参与,并不说明树兼容;force 风险更宽。

区分真冲突与解析器行为

在同 Node、npm、.npmrc 和 registry 的临时 clone 中复现。先运行冻结路径;npm ci 不会改写 lockfile,因此失败本身就是证据。

若声明区间相容却只在某 npm 版本失败,最小化依赖图并比较相邻版本。不要在证明区间非空前把所有 ERESOLVE 都归咎于 npm。

要求可重复退出证明

只有 fresh checkout 的 npm ci 无绕过参数通过、npm explain/npm ls 显示预期树、diff 可解释且 build/test 通过,修复才成立。

若项目有意保留 legacy-peer-deps,应在 .npmrc 明确政策、记录被忽略的合同并添加集成测试;这仍是受控例外。

zh-CN npm ERESOLVE repair validation diagram
原创编辑插画: repair the contract and prove a clean install. Watch at Ease