[译]都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 yarn@1.1 --global,npm install yarn@1.2 --global。但每次项目切换你都需要再重新安装Yarn,这很恐怖了!

npm可以轻松做到版本切换!

使用nvm或n一键切换npm版本,就是如此简单方便!
[译]都8102年了,为什么你还在用Yarn?!

用Lerna管理你的workspaces

如果你在用Yarn的workspaces特性,在npm中,你可以用Lerna代替它,它提供了Yarn所具备的所有特性,而且还延伸了一些新功能:管理workspace版本,在workspace中执行命令,发布workspaces。

用npm-check来交互式升级

Yarn upgrade-interactive命令很棒:

[译]都8102年了,为什么你还在用Yarn?!

在npm中也可以用npm-check实现该功能:

[译]都8102年了,为什么你还在用Yarn?!

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吧!

相关推荐