140

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

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

4

3 回答 3

114

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

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

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

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

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

在您的情况下,您最好采用以下方式:

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

看起来很简单。与 yarn 一样——它自己修复了 lockfile 冲突。这里唯一的要求是package.json事先解决所有冲突(如果有的话)。

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

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

于 2019-01-10T11:03:15.013 回答
96

是的,它可能会产生不好的副作用,可能不是很常见,但例如你可以在 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

于 2020-06-05T07:35:39.987 回答
17

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

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

编辑:只是想警告对使用上述软件包感兴趣的人,有时它的行为可能会出现异常且难以删除。因此,尽管它是一个有用的工具,但它仍然需要一些工作。

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

于 2019-09-25T12:19:11.533 回答