两个人各加一个依赖,合并时 pnpm-lock.yaml 冲突上千行,手工保留两边后 pnpm install --frozen-lockfile 报 ERR_PNPM_OUTDATED_LOCKFILE。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

git checkout --theirs pnpm-lock.yaml
pnpm install
pnpm install --frozen-lockfile
git diff --stat pnpm-lock.yaml

锁文件是整棵依赖树的序列化结果,任何一边新增依赖都会改动相同区块,逐行合并很难保持结构自洽。手工拼接出的内容缺少 integrity 或 peer 解析结果,冻结安装时校验直接失败。这一点先确认清楚,后面就不用反复试。

「pnpm lock 冲突」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

具体做法是,冲突时不要手工编辑 先取任意一边的锁文件;在合并后的 package.json 上重新跑 pnpm install;确认 lockfile 里两个新依赖都在 且没有重复的解析块;CI 保持 --frozen-lockfile 拦住不一致的提交。

改完照着核一遍,frozen-lockfile 安装通过 锁文件里两个依赖各只有一条解析记录。

作者 9823189