包管理器
以前一个简单的文本编辑器足以让开发人员创建和管理他们的大部分项目。但如今,即使是一个相当简单的项目也有成百上千个脚本,而且还具有复杂的嵌套依赖项。如果没有某种自动化工具,这些脚本根本无法管理。这就是包管理器发挥作用的地方。
包管理器干的事
以各种不同的方式自动处理项目的依赖,例如:在包管理器的帮助下,我们可以安装、卸载、更新和升级包,配置项目设置,运行脚本等。
Yarn和NPM
Yarn是为了弥补NPM的一些缺陷而出现的
NPM的缺陷
NPM install
的时候巨慢,特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此- 同一个项目,安装的时候无法保持一致性。由于package.json文件版本号的特点,下面三个版本号在安装的时候代表不同的含义
“5.0.3”,表示安装指定的5.0.3版本 “~5.0.3”,表示安装5.0.X中的最新版本 ^5.0.3,表示安装5.X.X中最新的版本 这样就麻烦的,如果在项目约束中是用的后面两种,那么就很可能不同的人最终下载到的版本会不一样
- 安装的时候包会在同一时间下载和安装,中途一个包抛出错误,NPM也会继续下载和安装包
- NPM把所有的日志输出到终端,有关报错误的信息和警告信息扎堆在一起,影响阅读,更甚至你可能永远不会发现实际存在的错误
Yarn的优点
- 速度快
1.并行安装,NPM是按照队列执行每个package,只有当前package安装完成才会安装下一个package,而Yarn是同步执行所有任务,提高了性能。
2.离线下载,如果之前已经安装了一个软件包,用Yarn会从缓存中获取,而NPM依旧从网络中下载 - 安装版本统一
为了防止每次拉取到不同的版本,Yarn有一个锁定文件(lock file)记录了被确切安装上的模块的版本号,每次只要新增了一个模块,Yarn就会创建(或更新)这个Yarn.lock文件,每次拉取下载是都是已经固定了的版本,这样就保证了模块的统一,而NPM也有这样的功能,但是lock file不是默认生成,需要执行
NPM shrinkwrap
命令 - 更简洁的输出
Yarn相比NPM输出更简洁,不过这只在1.X.X版本中存在