比较Yarn与npm—两个最流行的软件包管理器

108 阅读5分钟

Yarn vs npm: Everything You Need to Know

在本教程中,我们将比较Yarn与npm--两个最流行的软件包管理器。我们将把它们并列起来,探讨它们各自的优点和缺点,以帮助你选择在你的项目中使用哪一个。

铺设基础知识

在过去的好日子里,一个简单的文本编辑器就足以让开发者创建和管理他们项目的大部分内容。但从那时起,网络已经发生了巨大的变化。现在,即使是一个相当简单的项目,也会有成百上千的脚本,并且有复杂的嵌套依赖关系,如果没有某种自动化工具,根本不可能管理这些脚本。而这正是软件包管理器发挥作用的地方。

软件包管理器是一种工具,它以各种方式自动处理项目的依赖关系。例如,在软件包管理器的帮助下,我们可以安装、卸载、更新和升级软件包,配置项目设置,运行脚本,等等。所有艰苦和繁琐的工作都由包管理器完成,只留给我们有趣的部分 - 编码本身。

npmnpm是Node Package Manager的缩写。它早在2010年发布,开始了网络开发的新时代。在那之前,项目的依赖性都是手动下载和管理的。npm是推动网络发展的魔杖。

npm实际上涉及三件事。

  • 一个用于管理你的npm体验的各个方面的网站
  • 一个用于访问广泛的JavaScript包公共数据库的注册中心
  • 一个命令行界面(CLI),用于通过终端与npm进行交互。

然而,当大多数人谈论npm时,他们通常是指最后一个--CLI工具。它作为一个默认的软件包管理器与每个新的Node安装一起提供。这意味着你可以立即开始使用它。

如果你想深入了解npm的工作,请参考我们的Node软件包管理器指南

Yarn是指Yet Another Resource Negotiator。Yarn软件包管理器是npm的替代品,由Facebook在2016年10月发布。Yarn的最初目标是处理npm的缺点,如性能和安全问题。Yarn很快被定位为一个安全、快速、可靠的JavaScript依赖性管理工具。

但npm团队吸取了教训,通过实现缺失的功能迅速填补了npm的空白。

让我们快速穿越时空,看看大局。

  • 2010年:npm发布,支持Node。
  • 2016:Yarn发布了。它显示出比npm更强的性能。它还生成了一个yarn.lock 文件,使得共享和精确复制仓库变得更加容易和可预测。
  • 2017年:npm 5发布。它提供了自动生成一个package-lock.json 文件来回答yarn.lock
  • 2018年:npm 6发布,改进了安全性。现在npm在安装依赖项之前会检查安全漏洞。
  • 2020:Yarn 2和npm 7发布了。这两个软件包都有很大的新功能,我们将在本教程的后面看到。
  • 2021:Yarn 3发布了,并进行了各种改进。

现在,这两个软件包管理器在软件包管理竞赛中并驾齐驱,提供类似的特性和能力。但仍有一些差异,有助于决定我们选择使用哪一个。

在本教程的其余部分,我们将探讨npm和Yarn的主要异同点。

Yarn与npm:安装比较

我们将从npm和Yarn的安装过程开始我们的比较探索。

安装软件包管理器本身

正如我在上面提到的,npm已经预装了Node,所以不需要再手动安装npm。

相比之下,Yarn需要明确安装。首先,我们需要全局安装Yarn。

npm install -g yarn

然后,我们可以通过在项目中设置所需的版本,在每个项目的基础上使用它。我们通过在项目的根目录下运行yarn set version 命令来做到这一点。

yarn set version berry

在这种情况下,berry 是我们想要设置的版本。

如果我们想更新到最新的版本,我们就运行这个。

yarn set version latest

使用Yarn,我们可以为每个项目使用不同的版本。

要用npm做同样的事情,你需要安装nvm(Node Version Manager)。下面是如何使用nvm安装多个版本的Node

安装项目的依赖性

现在,让我们看看项目的依赖性是如何安装的。

当我们运行npm install ,依赖项是按顺序安装的,一个接一个。终端中的输出日志信息量很大,但有点难读。

为了用Yarn安装软件包,我们运行yarn 命令。Yarn以并行方式安装软件包,这是它比npm更快的原因之一。如果你使用Yarn 1,你会看到Yarn的输出日志是干净的,视觉上可区分的,而且简短。它们也是以树状形式排序的,便于理解。但在第2和第3个版本中,这种情况有所改变,日志不是那么直观和人可读的。

到目前为止,我们已经看到npm和Yarn有不同的命令来安装软件包。在下一节,我们将探讨更多的命令。

继续阅读Yarn vs npm: Everything You Need to KnowonSitePoint.