wjszxli

Yarn 和 npm的大比拼 - 谁是Node.js最强的包管理器?

wjszxli · 2017-01-20翻译 · 987阅读 原文链接

从NodeJs 7.4版本开始,npm4就是NodeJs的默认包管理器,但在与此同时,Facebook也发布了自己的包管理器--Yarn

那让我们具体来看看这两个NodeJs的包管理器,看他们能够做什么以及应该在什么时间去选择自己需要的那一个。

Yarn - 诞生于社区的包管理器

快速,可靠和安全的依赖管理 - 这是Facebook的工程师开发新的依赖管理器Yarn给出的承诺

但是他是否能达到我们的预期,我们拭目以待?

Yarn - the node.js package manager

安装 Yarn

有几种安装Yarn的方法,如果你已经安装了 npm,那你可以通过npm来安装Yarn

`npm install yarn --global`

但是,Yarn团队推荐的方法是通过本机操作系统软件包管理器安装它如果你是在Mac系统上,可能会用brew这样来安装:

brew update  
brew install yarn

在Hood下的 Yarn

在hood下Yarn有很多性能和安全性的改进,让我们看看这些是什么吧!

离线缓存

当你安装的时候用Yarn(using yarn add packagename)来安装包的时候,他会将包放在你的磁盘上,当你下次安装的时候,这个包会再次使用而不是发送HTTP请求包去安装。

你缓存的模块会安装进~/.yarn-cache,并以注册表名称作为前缀,并以模块版本后缀

这就意味着如果你用安装了Yarn 4.4.5版本的express,他将会放到~/.yarn-cache/npm-express-4.4.5目录上。

确定性安装

Yarn 使用lockfiles (yarn.lock)和确定性安装算法。我们可以跟“但它的工作在我的机器”这样的bug说再见了。

lockfile看起来像是这个样子:

Yarn lockfile

它包含所有依赖关系的精确版本号 - 就像是使用npm shrinkwrap文件。

点这里去 Tweet

####许可检查

Yarn带有一个方便的许可证检查器,如果在必须检查所有的模块的许可证依赖的情况下。它可以变得很强大。

yarn licenses

潜在的问题

Yarn 依然处于早期阶段,所以在使用的过程中会出现一些问题并不奇怪。

使用默认注册表发生了什么情况?

在默认情况下,Yarn CLI使用的是不同的注册表:https://registry.yarnpkg.com。到目前为止,也没有解释为什么它不使用相同的注册表。

难道Facebook有计划更改不兼容的API和拆分社区?

回到新贡献

在谈论Yarn的时候可能出现最频繁的逻辑问题可能是:为什么npm不和CLI团队谈谈,一起工作啊?

如果问题处理的速度够快,我相信所有npm用户都会想获得这些改进。

当我们谈论确定性安装,而不是提出一个lockfile,那么npm-shrinkwrap.json 应该已经修复了。

为什么会出现奇怪的版本?

在Node.js和npm的世界中,版本从1.0.0开始。

但是在写这篇文章的时候,Yarn却是在0.18.1。

是什么东西少了让Yarn不够稳定?Yarn根本不遵循semver吗? via @RisingStack

点这里去Tweet

npm 4

npm是我们都知道的默认包管理器,它从Node.js的v7.4版本开始捆绑在一起。

更新 npm

要开始使用npm版本4,只更新当前的CLI版本:

`npm install npm -g`

在写这篇文章的时候,这个命令将安装npm 4.1.1版本,它于2016年12月11日发布。让我们看看在这个版本中有什么变化!

####从第三个版本开始的更新

  • npm search 重新实现了流结果,并且不再支持排序,

  • npm scripts 不再在运行脚本之前预先运行用于运行npm的节点可执行文件的路径,

  • prepublish 已被弃用 - 你应该从现在开始使用prepare,

  • npm outdated 如果找到过期的包,则返回1,

  • 不再支持部分收缩包装 - npm-shrinkwrap.json被认为是一个完整的清单,

  • 不再支持Node.js 0.10和0.12,

  • npm doctor, 如果是与npm有关的问题,则它诊断用户的环境并让用户知道一些推荐的解决方案

从这里可以看到,npm的团队也很忙 -- npm和yarn在过去几个月里取得了很大的进步

结论

很高兴看到一个新的,开源的npm客户端 -- 毫无疑问,所做的这些努力让Yarn变得伟大! 希望我们将看到Yarn的改进结合到npm中,如果是这样的话两个包管理工具的用户都会从中获得受益。

更多文章,请看译者博客:http://www.wjs.photo

英文原文:https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

相关文章