问题描述
package-lock.json就是用来固定依赖版本的,为什么很多时候执行npm install package-lock.json,按理说版本都固定了,又没有安装新的依赖就不应该改变的,这是为什么?
问题出现的环境背景及自己尝试过哪些方法
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
你期待的结果是什么?实际看到的错误信息又是什么?
package-lock.json不会改变
package-lock.json就是用来固定依赖版本的,为什么很多时候执行npm install package-lock.json,按理说版本都固定了,又没有安装新的依赖就不应该改变的,这是为什么?
// 请把代码文本粘贴到下方(请勿用图片代替代码)
package-lock.json不会改变
npm的安装原理:
如果你的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.json
里 core-js
的依赖改成 ~3.4.6
, ~3.4.7
,重新安装都不会使 package-lock.json
变化, 因为lock文件里面保存的版本比package文件里面的大。
但是如果你把package.json文件里面的版本直接改成 "core-js": "~3.4.8"
, 这就比lock文件里面的版本要高了,需要重新下载最新的,会下载符合3.5.x
的最新版。同时更新lock文件。
2 回答1.2k 阅读✓ 已解决
2 回答935 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答934 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
也好奇这个问题,总结一下:
原因:package-lock.json里是会保存项目所有的依赖(包括依赖的依赖)的版本,下载地址等。 因为项目package.json中对依赖版本不同的要求,会有不同写法,比如限定最低版本,限定版本范围等等。所以在不同时间运行npm i,可能期间有些依赖会出新的版本,造成package-lock.json变动。 就算自己的项目直接依赖固定了版本号,但是你的依赖的依赖没法固定,也会出现这种现象。
解决方法: nmp 5.8还是5.9添加了新命令,npm ci用于完全从package-lock.json来快速安装依赖,不会产生这个问题。