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??