删除`package-lock.json`以快速解决冲突

Joh*_*uma 17 javascript node.js npm package-lock.json

通常,在建立团队的过程中,我遇到了合并冲突,package-lock.json而我的快速解决方案一直是删除文件并使用重新生成文件npm install。我尚未认真考虑此修复程序的含义,因为它以前没有引起任何可察觉的问题。

删除文件并以npm这种方式重新创建而不是手动解决冲突是否存在问题?

OZZ*_*ZIE 79

是的,它可能会产生不好的副作用,可能不是很频繁,但例如您可以在 package.json 中"moduleX": "^1.0.0"使用,而您曾经"moduleX": "1.0.0"package-lock.json.

通过删除package-lock.json和运行,npm install您可能会在不知情的情况下更新到 moduleX 的 1.0.999 版本,并且可能他们已经创建了一个错误或进行了向后破坏性更改(不遵循语义版本控制)。

无论如何,已经有一个标准的解决方案。

  1. 修复内部冲突 package.json
  2. 跑: npm install --package-lock-only

https://docs.npmjs.com/cli/v7/configuring-npm/package-locks#resolving-lockfile-conflicts

  • 如果“moduleX”需要为 1.0.0(不大于),那么不应该在 package.json 中指定 1.0.0 而不是 ^1.0.0 吗? (3认同)

sky*_*yer 22

是的,它可能并且将以非常糟糕的方式影响所有项目。

  1. 如果您的团队npm install在每次git pull使用后都没有运行,则你们都使用不同的依赖项版本。因此,其结尾为“但对我有用!!” 和“我不明白为什么我的代码对您不起作用”

  2. 即使所有团队都运转了npm install,也并不意味着一切都很好。在某些时候,您可能会发现您的项目行为有所不同。在某种程度上,您已经多年没有改变了。在调试之后(可能很痛苦),您会发现这是因为下一个主要版本的3级依赖关系已更新,这导致了一些重大更改。

结论:永远不要删除package-lock.json。在您的情况下,您最好采取以下方法:

方法1

  1. 恢复您的更改 package-lock.json
  2. stash 您的更改
  3. pull 最新的代码版本
  4. 运行npm install您需要添加的所有依赖项
  5. 散布您的更改

方法2

  1. 运行合并
  2. 要解决冲突,请选择“仅更改” package-lock.json
  3. 运行,npm install以便您要添加的依赖项也包含在其中package-lock.json
  4. 完成提交合并提交

  • @JRichardsz,您仍然没有显式控制传递(间接,第二级以上)依赖项 (3认同)
  • 这个答案的最后一行是关键。拉出并看到合并冲突仅在“package-lock.json”文件中后,您可以执行“npm install”,它会为您解决它们(然后您只需暂存/提交/ ETC。)。直到:)谢谢你的提示! (3认同)
  • @toni_lehtimaki 如果它基本上是一样的,为什么呢?如果您选择第一个以当前的 `package-lock.json` 为基础进行变基或在合并时接受“他们的”`package-lock.json`,它们实际上是相同的。或者我在这里遗漏了什么? (2认同)

Tah*_*aha 13

我知道这是一个老问题,但对于未来的寻求者,您还可以使用 npm-merge-driver 尝试自动解决 npm 相关文件的合并问题。

只需全局安装它npx npm-merge-driver install --global。你可以在这里阅读更多关于它的内容npm-merge-driver

编辑:只是想警告那些对使用上述包感兴趣的人,有时它可能会表现得不稳定且难以删除。所以虽然它是一个有用的工具,但它仍然需要一些工作。