[译]都8102年了,为什么你还在用Yarn?!
原文出处:yarn-vs-npm
仍记得Yarn刚问世时的火爆场景
真的太快了,每次yarn install,都会为我节省出好几分钟的时间。
Yarn会保证你的node_modules文件夹与同事的node_modules文件夹严格匹配,同样,服务器上的node_modules文件夹也和你本地一模一样,不会出现包版本不一致的情况,也再也不会出现‘在我电脑上好好的啊¯_(ツ)_/¯’这样的话。
六个月过去了...
Npm.v5版本脱胎换骨而来,带来了速度提升与版本锁定这两个杀手锏。没错,就是我们刚初弃npm投yarn的最重要的原因。
现在,很多开发者心里在嘀咕:我还有必要用Yarn吗?
我觉得,是时候再次投到到npm的温暖怀抱了!
npm和Yarn一样快
请自行查看:
# Backup mv node_modules node_modules_backup mv package-lock.json package-lock.backup.json mv yarn.lock yarn.backup.lock # Test cold npm speed time npm install # Reset modules rm -Rf node_modules # Test warm npm speed time npm install # Test cold yarn speed time yarn install # Reset modules rm -Rf node_modules # Test warm yarn speed time yarn install # Reset rm package-lock.json rm yarn.lock # Restore mv node_modules_backup node_modules mv package-lock.backup.json package-lock.json mv yarn.backup.lock yarn.lock
我按上述步骤运行了三次,速度几近持平。
轻松切换npm版本
Bob安装了Yarn v1.1,Brenda安装了Yarn v1.2. 当他们在工程里添加或删除依赖包时,会使得Yarn修改yarn.lock文件。但在两个Yarn版本中,lock文件有些许的不同,这可不是什么好事。
你可以在package.json中标明你的工程应该使用yarn的哪个版本。
但如果你有多个工程,每个工程所需的yarn又不尽相同时可怎么办?
你应该用npm来安装多个yarn版本:npm install [email protected] --global,npm install [email protected] --global。但每次项目切换你都需要再重新安装Yarn,这很恐怖了!
npm可以轻松做到版本切换!
使用nvm或n一键切换npm版本,就是如此简单方便!
用Lerna管理你的workspaces
如果你在用Yarn的workspaces特性,在npm中,你可以用Lerna代替它,它提供了Yarn所具备的所有特性,而且还延伸了一些新功能:管理workspace版本,在workspace中执行命令,发布workspaces。
用npm-check来交互式升级
Yarn upgrade-interactive命令很棒:
在npm中也可以用npm-check实现该功能:
npm install npm-check --save-dev
添加脚本:
{ "scripts": { "upgrade-interactive": "npm-check --update" } }
然后,npm也可以npm run upgrade-interactive
了。
Yarn正在变得复杂
虽然很多工程的readme中同时展示了npm和yarn,但其实真不必这样。比如,create-react-app工程的readme:
npm run build or yarn build
Builds the app for production to the build folder.
Yarn在此处的作用是什么?None。
这对于新手而言绝对充满了困惑,我该运行哪个命令?Yarn是什么?我需要它么?
选择Yarn,意味着你的团队都将必须使用yarn。 Javascript的生态已经十分复杂了,我们真的要再拿Yarn火上浇油吗?
我希望Yarn团队将他们杰出的工作直接放在npm中来让我们的生活好过一点。
起飞吧npm!
当我重新切回npm后,我发现npm run命令竟然有自动补全功能,这很赞!虽然Yarn也许会作出同样的功能,但npm才是老大哥!
npm也有其他的一些新功能,比如npm audit,它可以扫描你工程中的现存漏洞。
npm已经足够快,npm的社区已经足够成熟,且一些packages赋予了npm更加强大的生命力!忘了Yarn吧!