本文将深入探讨 Yarn 和 npm 这两大流行的 JavaScript 包管理器,并对它们各自的优缺点进行比较,助您为项目选择合适的工具。
核心要点
基础知识
在过去,简单的文本编辑器足以让开发者创建和管理大部分项目。但如今,网络发生了翻天覆地的变化。现在,即使是一个相当简单的项目,也可能包含数百甚至数千个脚本,以及复杂的嵌套依赖关系,如果没有某种自动化工具,这些依赖关系根本无法管理。这就是包管理器发挥作用的地方。
包管理器是一种工具,它可以以多种方式自动处理项目的依赖关系。例如,借助包管理器,我们可以安装、卸载、更新和升级包,配置项目设置,运行脚本等等。所有繁琐的工作都由包管理器完成,我们只需要专注于编码本身。
npm 代表 Node 包管理器 (Node Package Manager)。它于 2010 年发布,开启了 Web 开发的新时代。在此之前,项目依赖项是手动下载和管理的。npm 正是推动 Web 发展到更高水平的魔杖。
npm 实际上包含三部分:
但是,当大多数人谈论 npm 时,他们通常指的是最后一种——CLI 工具。它作为默认的包管理器与每个新的 Node 安装一起提供。这意味着您可以立即开始使用它。
如果您想深入了解 npm 的使用方法,请参阅我们的 Node 包管理器指南。
Yarn 代表 Yet Another Resource Negotiator(另一种资源协商器)。Yarn 包管理器是 npm 的替代方案,由 Facebook 于 2016 年 10 月发布。Yarn 的最初目标是解决 npm 的缺点,例如性能和安全问题。Yarn 迅速成为安全、快速和可靠的 JavaScript 依赖项管理工具。
但 npm 团队吸取了教训,并通过实现缺失的功能迅速弥补了 npm 的不足。
让我们快速回顾一下历史,以了解全局情况:
如今,这两个包管理器在包管理竞赛中不相上下,提供类似的功能。但仍然存在一些差异,有助于我们确定使用哪个。
在本教程的其余部分,我们将探讨 npm 和 Yarn 之间的主要异同。
Yarn 与 npm:安装比较
我们将从 npm 和 Yarn 的安装过程开始比较。
如上所述,npm 预装在 Node 中,因此无需手动安装 npm。
相反,Yarn 需要显式安装。首先,我们需要全局安装 Yarn:
<code class="language-bash">npm install -g yarn</code>
然后,我们可以通过在项目根目录中运行 yarn set version 命令,在每个项目的基础上使用它:
<code class="language-bash">yarn set version berry</code>
在这种情况下,berry 是我们想要设置的版本。
如果我们想更新到最新版本,我们运行以下命令:
<code class="language-bash">yarn set version latest</code>
使用 Yarn,我们可以为每个项目使用不同的版本。
要使用 npm 执行相同的操作,您需要安装 nvm(Node 版本管理器)。以下是如何使用 nvm 安装多个 Node 版本的方法。
现在,让我们看看如何安装项目依赖项。
当我们运行 npm install 时,依赖项会依次安装。终端中的输出日志信息丰富,但有点难以阅读。
要使用 Yarn 安装包,我们运行 yarn 命令。Yarn 并行安装包,这是它比 npm 更快的原因之一。如果您使用的是 Yarn 1,您会看到 yarn 输出日志简洁明了,视觉上易于区分。它们也以树状形式排序,便于理解。但在版本 2 和 3 中,日志并不那么直观易懂。
到目前为止,我们已经看到 npm 和 Yarn 有不同的安装包命令。在下一节中,我们将探讨更多命令。
比较 npm 和 Yarn 命令
npm 和 Yarn 共享许多命令,但也有一些不相同的命令。让我们首先探讨一些相同的命令:
这些命令使在两个管理器之间切换变得容易,但有一些不相同的命令可能会造成混淆。让我们在下一个列表中看看它们是什么:
Yarn 还有一些 npm 没有的独特命令。例如,why 命令显示需要包的原因:它可能是依赖项、本地模块或项目依赖项。
Yarn 与 npm:速度和性能
每当 Yarn 或 npm 需要安装包时,它们都会执行一系列任务。在 npm 中,这些任务是按包依次执行的,这意味着它会在一个包完全安装后才会继续下一个包。相反,Yarn 并行执行这些任务,从而提高了性能。
虽然这两个管理器都提供缓存机制,但 Yarn 似乎做得更好一些。通过实现零安装范例(我们将在功能比较部分看到),它能够几乎立即安装包。它缓存每个包并将其保存在磁盘上,因此下次安装此包时,您甚至不需要互联网连接,因为包是从磁盘离线安装的。
尽管 Yarn 有一些优势,但在其最新版本中,Yarn 和 npm 的速度相当。因此,我们在这里无法定义一个明确的赢家。
Yarn 与 npm:安全比较
对 npm 的主要批评之一是关于安全性的。之前的 npm 版本有一些严重的安全性漏洞。
从版本 6 开始,npm 在安装过程中会审计包,并告知您是否发现任何漏洞。我们可以通过对已安装的包运行 npm audit 来手动执行此检查。如果发现任何漏洞,npm 将向我们提供安全建议。
如上图所示,我们可以运行 npm audit fix 来修复包漏洞,如果可以修复,则依赖项树也将被修复。
Yarn 和 npm 都使用加密哈希算法来确保包的完整性。
Yarn 与 npm:功能比较
与命令一样,npm 和 Yarn 也共享一些功能,但也有一些区别。让我们首先探讨这两个包管理器共享的共同功能。
在 package.json(npm 和 Yarn 用于跟踪项目依赖项的文件)中,版本号并不总是精确的。相反,您可以定义一个版本范围。这样,您可以选择包的特定主要版本和次要版本,但允许 npm 安装可能修复某些错误的最新补丁。
在语义版本控制的理想世界中,补丁版本不会包含任何重大更改。但不幸的是,情况并非总是如此。npm 使用的策略可能会导致两台机器最终拥有相同的 package.json 文件,但安装了不同版本的包——这可能会引入错误。
为了避免包版本不匹配,已安装的精确版本会固定在包锁定文件中。每次添加模块时,npm 和 Yarn 分别创建(或更新)package-lock.json 和 yarn.lock 文件。这样,您可以保证另一台机器安装完全相同的包,同时仍然在 package.json 中定义了一系列允许的版本。
工作区允许您拥有一个 monorepo 来管理多个项目中的依赖项。这意味着您有一个单一的顶级根包,它有多个称为工作区的子包。
npx 命令用于从 ./node_modules/.bin 运行脚本。它还允许您从 npm 注册表执行包,而无需将它们安装到您的项目依赖项中。例如,您可以通过运行以下命令来创建一个新的 React 应用程序:
<code class="language-bash">npm install -g yarn</code>
在 Yarn 中,您可以使用等效的 dlx 命令来实现相同的结果:
<code class="language-bash">yarn set version berry</code>
我们将探讨的其余功能是 Yarn 独有的。
零安装将缓存存储在您的项目目录中,位于 .yarn 文件夹中。当您使用 yarn 或 yarn add
Plug’n’Play 是一种替代安装策略。Yarn 不会生成 node_modules 目录并将解析留给 Node,而是生成单个 .pnp.cjs 文件,该文件将包映射到磁盘上的位置及其依赖项列表。此功能可以加快项目启动速度,优化依赖项树,加快安装速度,当然还可以消除对 node_modules 文件夹的需求。
Yarn 内置了一个许可证检查器,这在开发应用程序的不同场景中非常有用。
Yarn 与 npm:选择哪个包管理器
我们已经介绍了 npm 和 Yarn 的各种异同,但我们还没有确定哪个更好,以及我们应该选择哪个。一如既往,答案取决于我们的愿望和需求。
作为一般指南,我总结如下建议:
如果您仍然难以在 npm 和 Yarn 之间做出明确的决定,那么您可以检查 pnpm,它试图结合这两个包管理器的优点,并且是包管理池中的第三大巨头。
Yarn 与 npm:结论
我们已经了解了包管理器对于现代 Web 开发的重要性,并且我们比较了市场上最流行的两个竞争对手。它们都有各自的优点和缺点,为了选择最适合您的,您需要清楚地了解您的需求。决定哪个更适合您的最佳方法是尝试两者,看看哪个性能更好。
最后,不要过度思考。只需选择一个,然后转到有趣的部分:创建很棒的应用程序!
关于 Yarn 与 npm 的常见问题解答
Yarn 和 npm 都是 JavaScript 的包管理器,但它们有一些关键区别。Yarn 由 Facebook 开发,旨在解决 npm 的一些缺点。它提供了更高的速度、更好的安全性以及更可靠的依赖项管理。另一方面,npm 是 Node.js 的默认包管理器,拥有更大的用户群。由于其更简单的语法,它也更容易被初学者使用。
是的,Yarn 通常比 npm 快。这是因为 Yarn 并行安装包,这大大加快了安装过程。另一方面,npm 顺序安装包,这可能会比较慢。
Yarn 有一个名为校验和的功能,它在执行已安装包的代码之前验证其完整性。这增加了一层 npm 不具备的额外安全层。但是,npm 在最近的版本中对其安全功能进行了重大改进。
虽然从技术上讲可以在同一个项目中同时使用 Yarn 和 npm,但不建议这样做。这是因为 Yarn 和 npm 以不同的方式处理依赖项,这可能会导致项目中的不一致和错误。
Yarn 使用锁定文件来锁定项目依赖项的版本。这确保了在所有机器上,每次安装都会产生 node_modules 中完全相同的文件夹结构。npm 也使用锁定文件,但它不如 Yarn 的严格。
由于其严格的锁定文件和校验和功能,Yarn 通常被认为比 npm 更可靠。但是,npm 在最近的版本中在可靠性方面取得了重大改进。
由于存在时间较长,npm 拥有更大的社区和更多可用的包。但是,Yarn 越来越受欢迎,并且拥有不断壮大的社区。
从 npm 切换到 Yarn 的一些挑战包括学习新的语法、迁移现有项目以及适应 Yarn 严格的依赖项管理。
Yarn 的语法与 npm 的语法略有不同。例如,要使用 Yarn 安装包,可以使用命令“yarn add”,而使用 npm,则可以使用“npm install”。
由于其更简单的语法和更大的社区,npm 通常被认为更容易被初学者使用。但是,Yarn 提供了更高级的功能,并且对于更有经验的开发人员来说是一个不错的选择。
以上是纱线与NPM:您需要知道的一切的详细内容。更多信息请关注PHP中文网其他相关文章!