删除 `package-lock.json` 快速解决冲突
Deleting `package-lock.json` to Resolve Conflicts quickly
在团队设置中,通常,我在 package-lock.json
中遇到合并冲突,我的快速修复一直是删除文件并使用 npm install
重新生成它。我没有认真考虑此修复的含义,因为它之前没有引起任何可察觉的问题。
删除文件并npm
重新创建文件而不是手动解决冲突是否有问题?
是的,它可以而且将会以非常糟糕的方式影响所有项目。
如果您的团队在每个 git pull
之后都没有 运行 npm install
,你们都在使用不同的依赖项版本。所以它以“但它对我有用!!”结尾和“我不明白为什么我的代码对你不起作用”
即使全队运行s npm install
也不代表万事大吉。在某些时候,您可能会发现您的项目表现不同。在您多年未更改的部分中。在(可能非常痛苦)调试之后,您会发现这是因为 3 级依赖已针对下一个主要版本更新,这导致了一些重大变化。
结论:永远不要删除 package-lock.json
。
是的,对于第一级依赖项,如果我们指定它们时没有范围(如 "react": "16.12.0"
),我们每次 运行 npm install
时都会得到相同的版本。但是我们不能对 2+ 级深度的依赖关系(我们的依赖关系所依赖的依赖关系)说同样的话,所以 package-lock.json
对于稳定性非常重要。
在你的情况下,你最好做下一步:
- 修复
package.json
中的冲突
- 运行
npm install
看起来很简单。与 yarn 相同 - 它自行修复锁文件冲突。这里唯一的要求是事先解决package.json
中的所有冲突,如果有的话。
Per docs npm 将为您修复 package-lock.json
中的合并冲突。
[2021 年更新]重要!如果您已经使用了某个库并且其维护者的 npm/GitHub 帐户被黑了。并发布了带有恶意代码的新版本。而且你 package-lock.json
完好无损。你会好起来的。如果你放弃它,你就有麻烦了。
我知道这是一个老问题,但对于未来的寻求者,您还可以使用 npm-merge-driver,它会尝试自动解决 npm 相关文件的合并问题。
只需全局安装即可 npx npm-merge-driver install --global
。您可以在此处阅读更多相关信息 npm-merge-driver
编辑:只是想警告对使用上述包感兴趣的人,有时它会表现不稳定且难以删除。所以虽然它是一个有用的工具,但它仍然需要一些工作。
编辑:此存储库现已存档且只读。
是的,它可能会产生不良的副作用,也许不会经常发生,但例如您可以在 package.json "moduleX": "^1.0.0"
中使用并且您曾经在 "moduleX": "1.0.0"
中使用 package-lock.json
.
通过删除 package-lock.json
和 运行 npm install
,您可能会在不知情的情况下更新到 moduleX 的 1.0.999 版本,也许他们已经创建了一个错误或进行了向后破坏更改(不遵循语义版本控制)。
反正已经有标准的解决方案了。
- 修复里面的冲突
package.json
- 运行:
npm install --package-lock-only
查看此 link 了解更多信息:
https://docs.npmjs.com/cli/v6/configuring-npm/package-locks#resolving-lockfile-conflicts
npm i --force
为我工作
在团队设置中,通常,我在 package-lock.json
中遇到合并冲突,我的快速修复一直是删除文件并使用 npm install
重新生成它。我没有认真考虑此修复的含义,因为它之前没有引起任何可察觉的问题。
删除文件并npm
重新创建文件而不是手动解决冲突是否有问题?
是的,它可以而且将会以非常糟糕的方式影响所有项目。
如果您的团队在每个
git pull
之后都没有 运行npm install
,你们都在使用不同的依赖项版本。所以它以“但它对我有用!!”结尾和“我不明白为什么我的代码对你不起作用”即使全队运行s
npm install
也不代表万事大吉。在某些时候,您可能会发现您的项目表现不同。在您多年未更改的部分中。在(可能非常痛苦)调试之后,您会发现这是因为 3 级依赖已针对下一个主要版本更新,这导致了一些重大变化。
结论:永远不要删除 package-lock.json
。
是的,对于第一级依赖项,如果我们指定它们时没有范围(如 "react": "16.12.0"
),我们每次 运行 npm install
时都会得到相同的版本。但是我们不能对 2+ 级深度的依赖关系(我们的依赖关系所依赖的依赖关系)说同样的话,所以 package-lock.json
对于稳定性非常重要。
在你的情况下,你最好做下一步:
- 修复
package.json
中的冲突
- 运行
npm install
看起来很简单。与 yarn 相同 - 它自行修复锁文件冲突。这里唯一的要求是事先解决package.json
中的所有冲突,如果有的话。
Per docs npm 将为您修复 package-lock.json
中的合并冲突。
[2021 年更新]重要!如果您已经使用了某个库并且其维护者的 npm/GitHub 帐户被黑了。并发布了带有恶意代码的新版本。而且你 package-lock.json
完好无损。你会好起来的。如果你放弃它,你就有麻烦了。
我知道这是一个老问题,但对于未来的寻求者,您还可以使用 npm-merge-driver,它会尝试自动解决 npm 相关文件的合并问题。
只需全局安装即可 npx npm-merge-driver install --global
。您可以在此处阅读更多相关信息 npm-merge-driver
编辑:只是想警告对使用上述包感兴趣的人,有时它会表现不稳定且难以删除。所以虽然它是一个有用的工具,但它仍然需要一些工作。
编辑:此存储库现已存档且只读。
是的,它可能会产生不良的副作用,也许不会经常发生,但例如您可以在 package.json "moduleX": "^1.0.0"
中使用并且您曾经在 "moduleX": "1.0.0"
中使用 package-lock.json
.
通过删除 package-lock.json
和 运行 npm install
,您可能会在不知情的情况下更新到 moduleX 的 1.0.999 版本,也许他们已经创建了一个错误或进行了向后破坏更改(不遵循语义版本控制)。
反正已经有标准的解决方案了。
- 修复里面的冲突
package.json
- 运行:
npm install --package-lock-only
查看此 link 了解更多信息:
https://docs.npmjs.com/cli/v6/configuring-npm/package-locks#resolving-lockfile-conflicts
npm i --force
为我工作