两个分支各加了依赖,合并时 package-lock.json 报冲突,diff 两万多行,冲突标记有几十处。手改了几次,npm ci 直接报 lock 与 package.json 不一致。乍看像缓存或者权限的锅,追下去往往不是。

git checkout --ours package-lock.json
git add package.json
npm install
npm ci

追下去是这么回事:lock 文件是工具生成的完整依赖树,双方 install 的版本解析结果不同,逐行合并必然对不上。手工保留一侧,另一侧的依赖声明就丢了。

「lock 文件冲突」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,先以主干版本为底 git checkout --ours package-lock.json;把两边的 package.json 合并好 依赖项都留下;重新跑一次 npm install 让工具生成 lock;npm ci 验证 lock 和 package.json 一致;团队统一 node 和 npm 版本 减少解析差异。

验收就看一点,冲突标记清零 npm ci 能装完 两边新增的依赖都在。

作者 9823189