每次 npm install package-lock.json会改变

问题描述

package-lock.json就是用来固定依赖版本的,为什么很多时候执行npm install package-lock.json,按理说版本都固定了,又没有安装新的依赖就不应该改变的,这是为什么?

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

package-lock.json不会改变

阅读 24.6k
4 个回答

也好奇这个问题,总结一下:

原因:package-lock.json里是会保存项目所有的依赖(包括依赖的依赖)的版本,下载地址等。 因为项目package.json中对依赖版本不同的要求,会有不同写法,比如限定最低版本,限定版本范围等等。所以在不同时间运行npm i,可能期间有些依赖会出新的版本,造成package-lock.json变动。 就算自己的项目直接依赖固定了版本号,但是你的依赖的依赖没法固定,也会出现这种现象。

解决方法: nmp 5.8还是5.9添加了新命令,npm ci用于完全从package-lock.json来快速安装依赖,不会产生这个问题。

npm的安装原理:
微信图片_20191226132938.png

如果你的package.json和你的package-lock.json没有冲突的话,不会更新package-lock.json文件,反之会更新。

测试npm版本: 6.13.1

为什么会冲突?比如你手动改了版本号,比如依赖了core-js 3.4.5,如图

## package.json
"dependencies": {  
  "core-js": "~3.4.5"  
}
## package-lock.json
"dependencies": {  
  "core-js": {  
    "version": "3.4.7",  
    "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.4.7.tgz",  
    "integrity": "sha1-PdplYR2VaZtet3QupFHqBS03qmU="  
  }  
}

依赖的是core-js ~3.4.5, 锁定的是3.4.7
你把package.jsoncore-js 的依赖改成 ~3.4.6 , ~3.4.7,重新安装都不会使 package-lock.json变化, 因为lock文件里面保存的版本比package文件里面的大。

但是如果你把package.json文件里面的版本直接改成 "core-js": "~3.4.8", 这就比lock文件里面的版本要高了,需要重新下载最新的,会下载符合3.5.x 的最新版。同时更新lock文件。

因为要更新和下载包呀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏