Javascript 删除“package lock.json”以快速解决冲突
在组建的团队中,通常情况下,我会在Javascript 删除“package lock.json”以快速解决冲突,javascript,node.js,npm,package-lock.json,Javascript,Node.js,Npm,Package Lock.json,在组建的团队中,通常情况下,我会在package lock.json中遇到合并冲突,而我的快速修复方法一直是删除文件并使用npm install重新生成它。我没有认真考虑过这个修正的含义,因为它以前没有引起任何可察觉的问题 删除文件并让npm以这种方式重新创建文件而不是手动解决冲突是否有问题?是的,它可能并且将以非常糟糕的方式影响所有项目 如果您的团队在每次git pull之后都没有运行npm install,那么所有人都在使用不同的依赖项版本。所以它以“但它对我有效!!”和“我不明白为什么我的
package lock.json
中遇到合并冲突,而我的快速修复方法一直是删除文件并使用npm install重新生成它。我没有认真考虑过这个修正的含义,因为它以前没有引起任何可察觉的问题
删除文件并让npm以这种方式重新创建文件而不是手动解决冲突是否有问题?是的,它可能并且将以非常糟糕的方式影响所有项目
如果您的团队在每次git pull
之后都没有运行npm install
,那么所有人都在使用不同的依赖项版本。所以它以“但它对我有效!!”和“我不明白为什么我的代码对你无效”结尾
即使所有团队都运行npm安装
,也并不意味着一切都正常。在某个时刻,您可能会发现您的项目的行为有所不同。在一个你已经多年没有改变的地方。在调试之后(可能是相当痛苦的),您会发现这是因为第三级依赖项已更新为下一个主要版本,这导致了一些突破性的更改
结论:永远不要删除包锁.json
是的,对于第一级依赖项,如果我们指定它们不带范围(如“react”:“16.12.0”
),则每次运行npm install
时都会得到相同的版本。但是对于2+级深度的依赖项(我们的依赖项所依赖的依赖项),我们不能这样说,因此package lock.json
对于稳定性来说非常重要
在您的情况下,您最好采用下一种方式:
修复package.json中的冲突
运行npm安装
看起来很简单。纱线也是如此——它自己修复了锁文件冲突。这里唯一的要求是预先解决package.json
中的所有冲突(如果有)
Per npm将为您修复package lock.json
中的合并冲突。我知道这是一个老问题,但对于未来的搜索者,您也可以使用npm合并驱动程序,尝试自动解决npm相关文件的合并问题
只需全局安装它即可npx-npm合并驱动程序安装--global
。你可以在这里了解更多
编辑:只是想提醒那些对使用上述软件包感兴趣的人,有时它的行为会不稳定,很难删除。因此,尽管它是一个有用的工具,但它仍然需要一些工作 是的,它可能会产生不良副作用,可能不太常见,但例如,你可以在package.json中使用moduleX“^1.0.0”
,而你以前在package lock.json
中使用moduleX“”1.0.0“
通过删除package lock.json
并运行npm install
,您可以在不知情的情况下更新到moduleX的1.0.999版本,并且可能他们已经创建了一个bug或进行了一次向后破坏的更改(不遵循语义版本控制)
无论如何,已经有了一个标准的解决方案
修复package.json中的冲突
运行:npm安装--仅包锁定
参考这个答案——约翰NutuMa,因为NPM比接受的答案要容易得多,也许你应该考虑接受下面的(我的)解决方案:-为什么浪费时间在一些可以被固定的东西上?对于方法2,我注意到它很容易导致问题,我最终还是选择了方法1,所以我建议首先选择方法1。@toni_lehtimaki,如果它基本上是一样的,为什么?如果您选择第一个在当前package lock.json
上重新设置基础,或者在合并时接受“他们的”package lock.json
,那么它们实际上是相同的。或者我在这里遗漏了什么?如果我使用绝对版本,我的意思是没有^
或~
,是否需要package-lock.json?@JRichardsz,如果“moduleX”需要为1.0.0(而不是更大),您仍然无法显式控制可传递(间接,第2+级)依赖项那么,package.json中不应该指定1.0.0而不是^1.0.0吗?@sendethtothis地址我不相信占卜术当moduleX最初安装在1.0.0版中,并且没有任何更新的版本时,你怎么知道未来的版本是否会破坏某些东西或只是修复bug??