共计 1904 个字符,预计需要花费 5 分钟才能阅读完成。
原文出处: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 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 吧!