原文出处:yarn-vs-npm仍记得Yarn刚问世时的火爆场景真的太快了,每次yarn install,都会为我节省出好几分钟的时间。Yarn会保证你的node_modules文件夹与同事的node_modules文件夹严格匹配,同样,服务器上的node_modules文件夹也和你本地一模一样,不会出现包版本不一致的情况,也再也不会出现‘在我电脑上好好的啊¯(ツ)/¯’这样的话。六个月过去了…Npm.v5版本脱胎换骨而来,带来了速度提升与版本锁定这两个杀手锏。没错,就是我们刚初弃npm投yarn的最重要的原因。现在,很多开发者心里在嘀咕:我还有必要用Yarn吗?我觉得,是时候再次投到到npm的温暖怀抱了!npm和Yarn一样快请自行查看:# Backupmv node_modules node_modules_backupmv package-lock.json package-lock.backup.jsonmv yarn.lock yarn.backup.lock# Test cold npm speedtime npm install# Reset modulesrm -Rf node_modules# Test warm npm speedtime npm install# Test cold yarn speedtime yarn install# Reset modulesrm -Rf node_modules# Test warm yarn speedtime yarn install# Resetrm package-lock.jsonrm yarn.lock# Restoremv node_modules_backup node_modulesmv package-lock.backup.json package-lock.jsonmv 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 yarn@1.1 –global,npm install yarn@1.2 –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 buildBuilds 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吧!