package-lock.json与yarn.lock

5,261 阅读1分钟

一、依赖版本变更后,npm和yarn的不同

如果半年前项目依赖的vue版本是2.5.13,现在vue更新到2.5.21版本,
并且package.json中vue:'^2.5.2'。

如果项目使用的是yarn,项目中的yarn.lock中的vue依赖为2.5.13,
现在重新执行yarn,node_modules中vue的依赖还是2.5.13,并没有被更新到2.5.21.

如果项目中使用的是npm,项目中的package-lock.json中的vue依赖为2.5.13,
此刻执行npm install,node_modules中的vue依赖自动更新成2.5.21。
package-lock.json中的vue版本不变。
此刻会导致不同时期安装的依赖的版本不同,会产生不可预知的bug.
解决方法:查看package-lock.json中的vue版本,例如是2.5.13。
将package.json中的依赖直接写成固定版本,"vue": "2.5.13",
或者 npm install 后执行npm install vue@2.5.13

二、安装固定版本的依赖后,package.json与package-lock.json文件的变化

vue-cli项目生成后会生成package.json与package-lock.json文件
package.json文件中是项目的依赖,如1图此项目依赖vue,版本>=2.5.2,
package-lock.json是记录npm install时实际安装的各个依赖的具体来源和版本号,如2图此时的vue版本2.5.21
如图3 node_modules中的vue的版本也是2.5.21

当执行npm install vue@2.5.13时,如图4 node_modules的2.5.21版本会被2.5.13版本覆盖,但是package.json和package-lock.json中的vue依赖不会被改变。

三、安装固定版本的依赖后,package.json与yarn.lock文件的变化

执行yarn或者yarn add xxx时项目会生成yarn.lock文件,记录的是当前依赖的版本号和地址。如下图

当执行yarn add vue@2.5.13时,node_modules中的vue被2.5.13替换了,同时package.json中的vue依赖版本变成了固定版本2.5.13,yarn.lock文件中的依赖变成了2.5.13。