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

IT技术 javascript node.js npm package-lock.json
2021-03-06 12:06:26

在团队设置中,我通常会遇到合并冲突package-lock.json,我的快速解决方法一直是删除文件并使用npm install. 我没有认真考虑过这个修复的含义,因为它之前没有引起任何可察觉的问题。

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

3个回答

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

  1. 如果您的团队没有npm install在每个之后运行git pull那么您都在使用不同的依赖项版本。所以它以“但它对我有用!!”结尾。和“我不明白为什么我的代码对你不起作用”

  2. 即使所有团队都在运行npm install,也不意味着一切正常。在某些时候,您可能会发现您的项目行为有所不同。在你多年来一直没有改变的部分。在(可能非常痛苦)调试之后,您会发现这是因为第 3 级依赖项已针对下一个主要版本进行了更新,这导致了一些重大更改。

结论:永远不要删除package-lock.json.

是的,对于第一级依赖项,如果我们在没有范围的情况下指定它们(例如"react": "16.12.0"),我们每次运行时都会得到相同的版本npm install但是我们不能对 2+ 级深度的依赖(我们的依赖所依赖的依赖)说同样的话,所以package-lock.json对于稳定性来说真的很重要。

在你的情况下,你最好这样做:

  1. 解决冲突 package.json
  2. npm install

看起来很简单。与纱线相同 - 它自己修复锁文件冲突。这里唯一的要求是package.json事先解决所有冲突(如果有的话)。

每个文档npm 将为您修复合并冲突package-lock.json

[2021 年更新] 重要!如果您已经使用了某个库并且其维护者的 npm/GitHub 帐户被黑了。并发布了带有恶意代码的新版本。而你package-lock.json完好无损。你会好起来的。如果你放弃它,你就有麻烦了。

@JRichardsz,您仍然没有明确控制传递性(间接,2 级以上)依赖项
2021-04-24 12:06:26
这个答案的最后一行是关键。在拉取并看到合并冲突仅在package-lock.json文件中之后,您可以执行一个操作npm install,它将为您解决它们(然后您只需要暂存/提交/等)。TIL :) 谢谢你的提示!
2021-04-28 12:06:26
使用方法 2,我注意到它很容易导致问题,无论如何我最终都会使用方法 1,因此我建议首先使用方法 1。
2021-05-02 12:06:26
@toni_lehtimaki 为什么如果它基本上是一样的?如果您选择第一个以当前为基础package-lock.jsonpackage-lock.json在合并时接受“他们的” ,则它们实际上是相同的。还是我在这里遗漏了什么?
2021-05-03 12:06:26
等等,不需要解决yarn.lock. 只在里面package.json
2021-05-06 12:06:26

是的,它可能会产生不良的副作用,可能不是很频繁,但例如您可以在 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/v6/configuring-npm/package-locks#resolving-lockfile-conflicts

如果“moduleX”需要为 1.0.0(不大于),那么不应该在 package.json 中指定 1.0.0 而不是 ^1.0.0 吗?
2021-04-29 12:06:26
当 moduleX 最初安装在 1.0.0 版本并且没有任何更新版本时,您怎么知道未来的版本是否会破坏某些内容或只是修复错误?
2021-05-18 12:06:26
@SendETHToThisAddress 我不相信算命
2021-05-21 12:06:26

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

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

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

编辑:此存储库现已存档且只读。