实在没弄明白
看你package.json里面的插件版本号后面是不是有个上箭头^,这个符号表示最新版本,用npm默认获取最新版本,意思是指定1.0^的版本下载下来可能是2.0,反正就是最新版。yarn会忽略这个符号,下载你package.json中指定的版本。
目前很多老的前端项目用npm安装后会因为插件版本差异导致跑不起来的情况越来越多,用yarn能解决大部分问题,但也不是100%能解决。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
包管理工具的作用其实就很简单:下载,版本管理
下载就是从网上拉取包,放到node_modules目录下
版本管理就是解决版本冲突和版本一致性问题
npm下载太慢,所以有了cnpm,使用国内网络还有缓存
npm的版本管理有问题,版本有时候会不一致,然后有了yarn,又快有缓存还有lock机制锁定版本,版本问题解决了
(
npm5
也有package-lock.json
,虽然yarn
依然快但是两者差别不是太大了)关于版本不一致:当你在
package.json
写了vue: "^2.5.0"
的时候 就是代表可以使用>=2.5.0并且< 3.0.0
之间的任意版本(但是不能超过大版本如3.0.0以上),所以a同学在install
的时候下载最新vue2.5.6,过了几天b同学加入,vue经过一段时间更新到版本2.6.0了,这时下载依赖又会下载最新的2.6.0,就导致了ab两个同学项目vue版本不一致问题,而lock文件就是类似于一个包第一次下载的时候锁定版本,之后不管谁下载都是这个版本npm5有了自己的lock,也用到了缓存,在速度上也有了优化,还有其他问题吗?
好像有,假如电脑里有十几个项目,都用到了同一个技术栈(用到的包都差不多),这时每个项目都有独立的重复的包,能不能将包都放在一个地方呢?
然后就有了pnpm:
每次从网上下载还是慢,每个项目都有一堆
node_modules
怎么办,pnpm将所有的node包统一管理,哪个项目里用直接link一下,快还节省空间