我正在学习 package.json
和 package-lock.json
的区别。
我只使用一个名为chance的依赖来进行实验。
我首先通过 npm i chance@1.0.0
命令安装了它,然后 package.json
中显示 "chance": "^1.0.0"
,package-lock.json
中显示 "version": "1.0.0"
。
由于我想要查看锁定文件对版本的影响,因此我删除了 package-lock.json
和 node_modules
,然后运行 npm install
,这时在 package.json
中,chance
的版本仍然是 "chance": "^1.0.0"
;在新创建的锁定文件中,chance
的版本变成了 "chance": {"version": "1.1.8",
,自动更新。
然后我再次删除了package-lock.json
和node_modules
,并运行npm update
,结果似乎与前面的实验相同 - 在package.json
中我有"^1.0.0"
,在package-lock.json
中有"1.1.8"
我的问题如下:
- 无论是在
package.json
还是在package-lock.json
中,如果"^1.0.0"
与"1.1.8"
同时存在,则我在项目中实际使用的版本是哪个?我猜是1.1.8
对吗?因此仅查看package.json
中的版本不足以确定项目中使用的精确版本依赖? npm install
什么时候会更改锁定文件?我知道如果我们删除锁定文件,它将使用从package.json
中允许范围内的最新版本生成一个新的锁定文件。但是否有任何情况下即使我没有删除锁定文件,npm install
也会更改锁定文件?
npm i chance@1.0.0
时,你的package.json会被更改为精确的版本,不含^
:"chance":"1.0.0"
。但现实情况是不同的……这将导致随后的npm i
可能会使用该软件包的任何更高的次要/修补版本来更改package-lock
。尽管你只要求安装依赖包的确切版本。 - hastrb