如今欣欣向荣的前端圈可谓是百家争鸣,连包管理器都搞出两个来了,当然啦,我们不必每个都学,只需要选你喜欢的一个使用就行啦~
本文进行对比的是yarn0.27.5版本和npm5.3.0版本,都是截止本文写作日期最新的稳定版本了。首先通过create-react-app的依赖下载测试二者的首次下载,二次下载以及离线下载的速度,然后给出二者的常用命令。
yarn
首先我们下载最新版本的yarn 和npm。
1 | // if you have installed npm |
然后我们下载create-react-app,并创建一个demo项目,创建的时候它会自动给你下载依赖,为了强行测试,我们就删掉node_modules文件夹和yarn.lock文件,前者放置了所有下载的包,后者保存了所有单个包的版本要求,实际下载版本,下载地址以及依赖的版本要求。稍后我们在详细说明其重要性。
1 | npm install create-react-app |
三次下载测试的结果依次是12.35s, 5.54s, 13.40s。可以粗略的得出两个结论:
- 二次下载的时间年大概是第一次的一般左右。
- yarn.lock是加速下载的关键。
我们再来试一下离线下载,实际上如果你可以通过缓存达到离线下载的效果,但是,当我们要保持缓存清洁,同一个库只存在一个版本,那么当你要更新版本的时候,你就要做两件事:
yarn remove package
yarn cache clean && yarn add new-package
如果使用offline mode
,为每一个项目都准备一个缓存目录,存放当前的所有包的压缩包。具体步骤如下:
1 | cd PROJECT_DIR |
然后我们就可以看到在项目目录里的npm-packages-offline-cache目录就会有所有项目依赖的压缩包。
我们甚至可以将这个目录commit到git。让所有的项目成员都使用同一个版本的依并且节约时间。
npm
之前一直都是在用npm,写完这篇文章之后,我决定以后选择yarn,至于为什么看到最后就知道了。
我们用npm做同样的测试,首先是首次下载时间:
1 | // first time install |
两次的下载时间分别是168s,12s。第一次下载这么长是因为我删除了缓存,但是可以猜测正常下载时间应该是第二次下载的两倍左右。
command cheatsheet
经过上面的时间比较之后,我基本打算从npm迁移到yarn,所以最后,我们来总结一下yarn和npm的常用命令。
两者不太一样的命令
yarn
==npm install
下载所有依赖。yarn add package
==npm install package@latest --save
添加一个项目依赖包。yarn add package --save-dev
==npm install package --save-dev
添加一个开发依赖包。yarn remove package
==npm uninstall package --save
移除一个项目依赖包。yarn gloabl add package
==npm install -g package
下载一个全局包
两者一样的命令
npm init/link/publish/test/login/cache clean
== yarn init/link/publish/test/login/cache clean
yarn有npm没有的命令
yarn why package
为什么这个依赖会被安装,实际上也就是看看哪些包依赖于它。yarn upgrade-interactive
交互式的更新包。- 超快的下载速度。
- 自动保存依赖版本和依赖。
- 支持emoji表情。
总结
我选择yarn的最重要的原因是下载速度,其次是命令的简便性,当然用alias绑定简写之后这并不是个优势。本篇的目的不是贬低npm,而是希望两者都能互相学习,互相竞争,让javascript的包管理更加轻松愉快!
感谢阅读~