yarn是由Facebook,Google,Exponent,Tilde联合推出的一个新的JS包管理工具,yarn是为了弥补npm的一些缺陷而出现的。
npm的一些坑
(1). npm install 巨慢,特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。
(2). 同一个项目安装时无法保证一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义
-"5.0.3" : 表示安装指定的5.0.3版本;
-"~5.0.3" :表示安装新的版本;
-"^5.0.3" :表示安装5.X.X中最新的版本,
这样就麻烦了,常常出现在同一个项目中,有的同事是ok的,有的同事会由于安装的版本不一致出现bug。
(3). 安装的时候,包会在同一时间下载和安装,中途某个时候,一个包抛出错误,但是npm会继续下载和安装包。因为npm会把所有日志输出到终端,有关错误包的信息就会在一大堆npm打印的警告中丢失掉,并且你不会注意到实际发生的错误。
带着而这些坑,开始了yarn的优势及其解决的问题
yarn的优点
(1). 速度快
· 并行安装
· 离线模式
(2). 安装版本统一
(3). 更简洁的输出
(4). 多注册来源处理
(5). 更好的语义化
- yarn和npm命令对比
npm | yarn | 功能 |
---|---|---|
npm install xxx --global(-g) | yarn global(-g) add xxx | 全局安装依赖包 |
npm install | yarn install | 根据package.json安装项目所需的依赖包 |
npm update --global(-g) | yarn global(-g) upgrade | 全局更新依赖包 |
npm install --save-dev | yarn add xxx --dev | 安装所需的依赖包,并将该包的记录写到package.json文件的 devDependencies 选项中 |
npm uninstall xxx | yarn remove xxx | 卸载 |
npm version major | yarn version --major | 更新依赖包的版本 |
- npm的的未来:npm5.0
有了yarn的压力后,npm做了相应的改进
(1). 默认增加了类似于yarn.lock的package-lock.json
(2). git依赖支持优化:这个特性在需要安装大量内部项目(例如在没有自建源的内网开发),或需要使用某些依赖的未发布版本时很有用。在这之前可能需要使用指定 commit_id 的方式来控制版本。
(3).文件依赖优化:在之前的版本,如果将本地目录作为依赖来安装,将会把文件目录作为副本拷贝到 node_modules 中。而在 npm5 中,将改为使用创建 symlinks 的方式来实现(使用本地 tarball 包除外),而不再执行文件拷贝。这将会提升安装速度。目前yarn还不支持。