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

原文出处: yarn-vs-npm

仍记得Yarn刚问世时的火爆场景

真的太快了,每次yarn install,都会为我节省出好几分钟的时间。node

Yarn会保证你的node_modules文件夹与同事的node_modules文件夹严格匹配,一样,服务器上的node_modules文件夹也和你本地如出一辙,不会出现包版本不一致的状况,也不再会出现‘在我电脑上好好的啊¯_(ツ)_/¯’这样的话。react

六个月过去了...npm

Npm.v5版本脱胎换骨而来,带来了速度提高与版本锁定这两个杀手锏。没错,就是咱们刚初弃npm投yarn的最重要的缘由。json

如今,不少开发者内心在嘀咕:我还有必要用Yarn吗?bash

我以为,是时候再次投到到npm的温暖怀抱了!服务器

npm和Yarn同样快

请自行查看:app

# 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

我按上述步骤运行了三次,速度几近持平。ui

轻松切换npm版本

Bob安装了Yarn v1.1,Brenda安装了Yarn v1.2. 当他们在工程里添加或删除依赖包时,会使得Yarn修改yarn.lock文件。但在两个Yarn版本中,lock文件有些许的不一样,这可不是什么好事。spa

你能够在package.json中标明你的工程应该使用yarn的哪一个版本。
但若是你有多个工程,每一个工程所需的yarn又不尽相同时可怎么办?
你应该用npm来安装多个yarn版本:npm install yarn@1.1 --global,npm install yarn@1.2 --global。但每次项目切换你都须要再从新安装Yarn,这很恐怖了!code

npm能够轻松作到版本切换!

使用nvm或n一键切换npm版本,就是如此简单方便!
nvm.gif

用Lerna管理你的workspaces

若是你在用Yarn的workspaces特性,在npm中,你能够用Lerna代替它,它提供了Yarn所具有的全部特性,并且还延伸了一些新功能:管理workspace版本,在workspace中执行命令,发布workspaces。

用npm-check来交互式升级

Yarn upgrade-interactive命令很棒:

yarn-upgrade-interactive.png

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

npm-check.png

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

相关文章
相关标签/搜索