科技 · 实用指南
npm ERESOLVE?使用 force 前先证明 peer dependency 合同
保留 lockfile 和错误图,找出发起请求的 peer 边,修复版本区间交集,再用无绕过参数的干净安装证明结果。

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 明确政策、记录被忽略的合同并添加集成测试;这仍是受控例外。
