npm和yarn 有什么本质的区别吗?

新手上路,请多包涵

实在没弄明白

阅读 1.7k
2 个回答

包管理工具的作用其实就很简单:下载,版本管理
下载就是从网上拉取包,放到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一下,快还节省空间

看你package.json里面的插件版本号后面是不是有个上箭头^,这个符号表示最新版本,用npm默认获取最新版本,意思是指定1.0^的版本下载下来可能是2.0,反正就是最新版。yarn会忽略这个符号,下载你package.json中指定的版本。
目前很多老的前端项目用npm安装后会因为插件版本差异导致跑不起来的情况越来越多,用yarn能解决大部分问题,但也不是100%能解决。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题