yarn相对原来的npm的优点是你指定的是多少的版本,下载的就是多少的版本
而以前的npm有个问题。那就是他不会去下载你写在package.json里面的版本,而是会去下载最新的版本
比如
现在npm仓库里面有
1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 2.0.0
如果package.json里面是
~1.1.1
那么npm install以后会下载的是1.1.3
^1.1.1下载的是 1.2.0
而如果我们想要得到确切的1.1.1的版本我们需要把前面的符号删去,或者生成一个
npm-shrinkwrap.json文件
但是在npm5以后
在我们安装依赖会生成一个package-lock.json文件用来进行管理,所以以后下载的时候也是会下载固定的版本了
但是yarn就是用来解决这个问题的。现在我们探讨一下他们的区别。
这里研究的是,当原始的package.json文件改变的时候,会发生什么事情。
一开始安装webpack的版本是2.2.0
可以看到所有的版本都是设置成了2.2.0
这里可以到,第三个文件是webpack的json文件。下面的id就是版本了。
但是当我们改不了package.json里面的文件设置成
webpack@2.3.3的时候
可以看到我们实际上安装的版本是2.7.0的版本。
_from跟_id是不同的
就是说我们虽然写的是2.3.3,但是实际上安装的是2.7.0
而我们使用了yarn来进行管理
可以发现。使用yarn下载的包没有_id跟_form
在我们改变版本以后
版本维持一致。
虽然现在的npm也可以锁定版本。但是一旦出现不一致的情况。他还是会去下载最新的包。。。
他只有在package.json跟package-lock.json一致的情况下才会去下载确切版本的包
此次进行测试的
环境为
node 8.9.3
npm 5.5.1