首页 > web前端 > js教程 > 纱线与NPM:您需要知道的一切

纱线与NPM:您需要知道的一切

Jennifer Aniston
发布: 2025-02-09 09:28:13
原创
393 人浏览过

Yarn vs npm: Everything You Need to Know

本文将深入探讨 Yarn 和 npm 这两大流行的 JavaScript 包管理器,并对它们各自的优缺点进行比较,助您为项目选择合适的工具。

核心要点

  • Yarn 和 npm 都是流行的包管理器,各有优劣。由 Facebook 开发的 Yarn 速度更快、安全性更高,依赖管理更可靠。npm 作为 Node.js 的默认包管理器,拥有更大的用户群体,其更简单的语法也更易于初学者上手。
  • Yarn 并行安装包,通常比 npm(顺序安装包)更快。但是,最新版本的这两个包管理器的速度相当。
  • 在安全性方面,Yarn 使用校验和在执行包代码之前验证每个已安装包的完整性。npm 在最近的版本中也对其安全功能进行了重大改进,包括在安装过程中进行包审计。
  • Yarn 提供独特的特性,如 Plug’n’Play、零安装和内置许可证检查器。但是,与 npm 相比,它需要更多的磁盘空间。Yarn 和 npm 之间的选择应基于个人的需求和工作流程偏好。

基础知识

在过去,简单的文本编辑器足以让开发者创建和管理大部分项目。但如今,网络发生了翻天覆地的变化。现在,即使是一个相当简单的项目,也可能包含数百甚至数千个脚本,以及复杂的嵌套依赖关系,如果没有某种自动化工具,这些依赖关系根本无法管理。这就是包管理器发挥作用的地方。

包管理器是一种工具,它可以以多种方式自动处理项目的依赖关系。例如,借助包管理器,我们可以安装、卸载、更新和升级包,配置项目设置,运行脚本等等。所有繁琐的工作都由包管理器完成,我们只需要专注于编码本身。

npm 代表 Node 包管理器 (Node Package Manager)。它于 2010 年发布,开启了 Web 开发的新时代。在此之前,项目依赖项是手动下载和管理的。npm 正是推动 Web 发展到更高水平的魔杖。

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 版本管理器)。以下是如何使用 nvm 安装多个 Node 版本的方法。

安装项目依赖项

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

当我们运行 npm install 时,依赖项会依次安装。终端中的输出日志信息丰富,但有点难以阅读。

要使用 Yarn 安装包,我们运行 yarn 命令。Yarn 并行安装包,这是它比 npm 更快的原因之一。如果您使用的是 Yarn 1,您会看到 yarn 输出日志简洁明了,视觉上易于区分。它们也以树状形式排序,便于理解。但在版本 2 和 3 中,日志并不那么直观易懂。

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

比较 npm 和 Yarn 命令

npm 和 Yarn 共享许多命令,但也有一些不相同的命令。让我们首先探讨一些相同的命令:

  • npm init | yarn init:创建一个新包
  • npm run | yarn run:运行 package.json 中定义的脚本
  • npm test | yarn test:测试包
  • npm publish | yarn publish:发布包
  • npm cache clean | yarn cache clean:删除缓存文件夹中的所有数据

这些命令使在两个管理器之间切换变得容易,但有一些不相同的命令可能会造成混淆。让我们在下一个列表中看看它们是什么:

  • npm install | yarn:安装依赖项
  • npm install [package] | yarn add [package]:安装包
  • npm install --save-dev [package] | yarn add --dev [package]:安装包作为开发依赖项
  • npm uninstall [package] | yarn remove [package]:卸载包
  • npm uninstall --save-dev [package] | yarn remove [package]:卸载开发依赖项包
  • npm update | yarn upgrade:更新依赖项
  • npm update [package] | yarn upgrade [package]:更新包

Yarn 还有一些 npm 没有的独特命令。例如,why 命令显示需要包的原因:它可能是依赖项、本地模块或项目依赖项。

Yarn 与 npm:速度和性能

每当 Yarn 或 npm 需要安装包时,它们都会执行一系列任务。在 npm 中,这些任务是按包依次执行的,这意味着它会在一个包完全安装后才会继续下一个包。相反,Yarn 并行执行这些任务,从而提高了性能。

虽然这两个管理器都提供缓存机制,但 Yarn 似乎做得更好一些。通过实现零安装范例(我们将在功能比较部分看到),它能够几乎立即安装包。它缓存每个包并将其保存在磁盘上,因此下次安装此包时,您甚至不需要互联网连接,因为包是从磁盘离线安装的。

尽管 Yarn 有一些优势,但在其最新版本中,Yarn 和 npm 的速度相当。因此,我们在这里无法定义一个明确的赢家。

Yarn 与 npm:安全比较

对 npm 的主要批评之一是关于安全性的。之前的 npm 版本有一些严重的安全性漏洞。

从版本 6 开始,npm 在安装过程中会审计包,并告知您是否发现任何漏洞。我们可以通过对已安装的包运行 npm audit 来手动执行此检查。如果发现任何漏洞,npm 将向我们提供安全建议。

Yarn vs npm: Everything You Need to Know

如上图所示,我们可以运行 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 应用程序:

npm install -g yarn
登录后复制
登录后复制

在 Yarn 中,您可以使用等效的 dlx 命令来实现相同的结果:

yarn set version berry
登录后复制
登录后复制

我们将探讨的其余功能是 Yarn 独有的。

零安装

零安装将缓存存储在您的项目目录中,位于 .yarn 文件夹中。当您使用 yarn 或 yarn add 等命令时,Yarn 将创建一个 .pnp.cjs 文件。此文件包含 Node 用于加载项目包的依赖项层次结构。因此,您可以几乎立即访问它们。

Plug’n’Play

Plug’n’Play 是一种替代安装策略。Yarn 不会生成 node_modules 目录并将解析留给 Node,而是生成单个 .pnp.cjs 文件,该文件将包映射到磁盘上的位置及其依赖项列表。此功能可以加快项目启动速度,优化依赖项树,加快安装速度,当然还可以消除对 node_modules 文件夹的需求。

许可证

Yarn 内置了一个许可证检查器,这在开发应用程序的不同场景中非常有用。

Yarn 与 npm:选择哪个包管理器

我们已经介绍了 npm 和 Yarn 的各种异同,但我们还没有确定哪个更好,以及我们应该选择哪个。一如既往,答案取决于我们的愿望和需求。

作为一般指南,我总结如下建议:

  • 如果您对当前的工作流程感到满意,不想安装其他工具,并且磁盘空间不足,请选择 npm。
  • 如果您想要一些强大的功能,例如 Plug’n’Play,需要 npm 中缺少的一些功能,并且有足够的磁盘空间,请选择 Yarn。

如果您仍然难以在 npm 和 Yarn 之间做出明确的决定,那么您可以检查 pnpm,它试图结合这两个包管理器的优点,并且是包管理池中的第三大巨头。

Yarn 与 npm:结论

我们已经了解了包管理器对于现代 Web 开发的重要性,并且我们比较了市场上最流行的两个竞争对手。它们都有各自的优点和缺点,为了选择最适合您的,您需要清楚地了解您的需求。决定哪个更适合您的最佳方法是尝试两者,看看哪个性能更好。

最后,不要过度思考。只需选择一个,然后转到有趣的部分:创建很棒的应用程序!

关于 Yarn 与 npm 的常见问题解答

Yarn 和 npm 的主要区别是什么?

Yarn 和 npm 都是 JavaScript 的包管理器,但它们有一些关键区别。Yarn 由 Facebook 开发,旨在解决 npm 的一些缺点。它提供了更高的速度、更好的安全性以及更可靠的依赖项管理。另一方面,npm 是 Node.js 的默认包管理器,拥有更大的用户群。由于其更简单的语法,它也更容易被初学者使用。

Yarn 比 npm 快吗?

是的,Yarn 通常比 npm 快。这是因为 Yarn 并行安装包,这大大加快了安装过程。另一方面,npm 顺序安装包,这可能会比较慢。

Yarn 的安全性与 npm 的安全性相比如何?

Yarn 有一个名为校验和的功能,它在执行已安装包的代码之前验证其完整性。这增加了一层 npm 不具备的额外安全层。但是,npm 在最近的版本中对其安全功能进行了重大改进。

我可以在同一个项目中同时使用 Yarn 和 npm 吗?

虽然从技术上讲可以在同一个项目中同时使用 Yarn 和 npm,但不建议这样做。这是因为 Yarn 和 npm 以不同的方式处理依赖项,这可能会导致项目中的不一致和错误。

Yarn 与 npm 相比如何处理依赖项?

Yarn 使用锁定文件来锁定项目依赖项的版本。这确保了在所有机器上,每次安装都会产生 node_modules 中完全相同的文件夹结构。npm 也使用锁定文件,但它不如 Yarn 的严格。

Yarn 比 npm 更可靠吗?

由于其严格的锁定文件和校验和功能,Yarn 通常被认为比 npm 更可靠。但是,npm 在最近的版本中在可靠性方面取得了重大改进。

Yarn 的社区支持与 npm 的社区支持相比如何?

由于存在时间较长,npm 拥有更大的社区和更多可用的包。但是,Yarn 越来越受欢迎,并且拥有不断壮大的社区。

从 npm 切换到 Yarn 的一些挑战是什么?

从 npm 切换到 Yarn 的一些挑战包括学习新的语法、迁移现有项目以及适应 Yarn 严格的依赖项管理。

Yarn 的语法与 npm 的语法相比如何?

Yarn 的语法与 npm 的语法略有不同。例如,要使用 Yarn 安装包,可以使用命令“yarn add”,而使用 npm,则可以使用“npm install”。

对于初学者来说,Yarn 还是 npm 更好?

由于其更简单的语法和更大的社区,npm 通常被认为更容易被初学者使用。但是,Yarn 提供了更高级的功能,并且对于更有经验的开发人员来说是一个不错的选择。

以上是纱线与NPM:您需要知道的一切的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板