package-lock.json冲突怎么办

       在合并分支的时候会遇到package-lock.json的冲突,本来刚开始没有在意,认为也没什么。但是直到package-lock.json出现了一大片的冲突时,我才觉得问题是真的有点大。
        问题排查:很大概率是node版本和npm版本的问题。然后问各组员大家的npm版本,发现有两个同事是6.x版本的,而我自己的是7.x版本的npm。经过自己的测试,使用npm i 安装,发现6.x版本的npm安装依赖(package-lock.json)如下:
在这里插入图片描述

但是7.x版本的npm安装的依赖会是有一个packages的东西,这里会把之前安装的依赖都包在这个packages里面。
在这里插入图片描述

       所以,如果一个同事安装了一个新的插件,我们用不同版本的npm去安装依赖的话,由于安装的npm版本不同,所以写入的package-lock.json内容也会不同,就会导致package-lock.json文件很多的冲突。

解决方法:

       1.统一node版本和npm版本(至少统一一个大的版本),且在需要重新安装依赖的时候,使用npm ci的命令去安装。(强烈推荐,npm ci指的是根据package-lock.json去安装对应的版本,不对这个文件做改动)
       2.使用git忽略package-lock.json(不推荐,这样子会导致不能根据安装依赖路径去安装包了)

补充-npm i 和 npm ci的区别:

npm i
● npm i 将创建node_modules 文件夹并安装所有 package.json 中的依赖。
● npm i 会更新 package-lock.json 文件(也就是这一步,导致了package-lock-json的冲突,因为npm版本的不同,导致了写入方式不同)。
       适用场景:安装新依赖或者升级已有依赖。
npm ci
● npm ci 将删除 node_modules 文件夹以确保干净的环境。
● npm ci 会依照 package-lock.json 里的依赖版本精准安装。
● npm ci 强依赖于 package-lock.json,如果 package-lock.json 不存在,npm ci 将不会工作。
       适用场景:在 CI/CD 场景中使用 npm ci 更为合适,一方面,由于 npm ci 依赖于 package-lock.json,依赖版本确保一致,不会出现线上版本和开发版本不一致而引发的问题;另一方面,首次安装时,使用 npm ci 将比 npm i 更加迅速,原因是由于 package-lock.json 的存在,不需要做依赖的版本检查以及梳理各依赖之间的关系。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在配置.gitignore文件中忽略package-lock.json时,可以选择两种做法。首先,你可以将package-lock.json一直包含在仓库中,不将其忽略。这样做的好处是,其他开发人员在clone项目后,可以确保他们使用的是与你相同的依赖版本。但是在执行npm publish命令时,package-lock.json应该被忽略,不应该被发布出去。另一种做法是,在.gitignore文件中添加对package-lock.json的忽略规则。这样,package-lock.json文件将不会被Git跟踪和提交到仓库中。如果你选择这种做法,请确保在运行npm install之前删除package-lock.json文件,以便安装所有最新版本的依赖并重新生成package-lock.json。此外,你还可以在项目的根目录下添加.gitattributes文件,并在其中写入需要忽略的文件名,包括package-lock.json。使用merge=ours来指定合并冲突时选择保留当前版本。这样,即使其他开发人员在合并代码时修改了package-lock.json,也不会影响你的本地版本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [详解package.jsonpackage-lock.json](https://blog.csdn.net/weixin_38664300/article/details/127495039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [git merge时忽略某文件合并来避免冲突(以忽略package-lock.json文件冲突为例)](https://blog.csdn.net/m0_50181189/article/details/124912806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值