介绍
Yarn与NPM有哪些区别?Yarn 和 NPM 是两个最流行的Node.js包管理器。它们允许在使用 JavaScript 开发时下载、安装和管理包。
Yarn与NPM哪个更好?在本教程中,我们将比较 Yarn 和 NPM,考虑它们的性能、易用性、安全性以及它们提供的功能。
Yarn与 NPM:定义
Yarn与NPM有哪些不同?Yarn(Yet Another Resource Negotiator)和NPM(Node Package Manager)是用于 JavaScript 编码的包管理器。它们与Node.js 一起工作,Node.js用于帮助用户在 Web 浏览器之外开发和运行 JavaScript 代码。
Node.js 使用了大量开源包和库,使编码更加直接和高效。Yarn 和 NPM 等包管理器允许用户轻松安装、管理、更新和删除包、库和依赖项。
什么是Yarn?
Facebook 在 2016 年开发了 Yarn 作为 NPM 的替代品。它旨在提供 NPM 当时缺乏的更多高级功能(例如版本锁定),并创建更安全、稳定和高效的产品。
然而,自从 Yarn 发布以来,NPM 增加了几个关键特性。在目前的状态下,Yarn 现在更像是 NPM 的替代品,而不是替代品。
什么是 NPM?
NPM 是 Node.js 的默认包管理器,带有 CLI 工具,可帮助安装、管理和删除 Node.js 包。它还使用户能够共享开源 Node.js 包。
Yarn与 NPM:比较
Yarn与NPM哪个更好?下面概述了 Yarn 和 NPM 之间的一些异同。
安装
我们将从比较 Yarn 和 NPM 的安装过程开始:
Yarn
Yarn与NPM有哪些区别?要开始使用 Yarn,你需要使用官方网站上的 MSI 安装程序或包管理器(例如 Chocolatey、Scoop CLI 或 NPM 本身)安装它。在我们的在 Windows 上安装 Yarn和在 Ubuntu 18.04 上安装 Yarn的指南中了解更多信息。
NPM
默认情况下,NPM 包含在 Node.js 安装中,不需要任何额外的安装步骤。要了解有关安装 Node.js 和 NPM 的更多信息,请查看我们的指南之一:
- 如何在 Ubuntu 18.04 和 20.04 上安装 Node.js 和 NPM
- 如何在 CentOS 7 上安装 Node.js 和 NPM
- 如何在 Windows 上安装 Node.js 和 NPM
- 如何在 Mac 上安装 Node.js 和 NPM
依赖关系
Yarn
Yarn与NPM有哪些不同?Yarn 版本 1 和 NPM 都以非常相似的方式管理依赖项。它们都将项目元数据存储在package.json文件中,该文件位于项目目录内的node_modules文件夹中。
从版本 2 开始,Yarn 不再使用node_modules文件夹来跟踪依赖项。相反,Yarn 2.0 使用即插即用功能,该功能生成单个.pnp.cjs文件。此文件包含项目的依赖关系层次结构图。
Yarn 使用该yarn
命令安装依赖项。它并行安装依赖项,允许你同时添加多个文件。
安装依赖项会自动创建一个锁定文件,该文件保存用于项目的依赖项的确切列表。对于 Yarn,这个文件被称为yarn.lock。
NPM
NPM 使用该npm install
命令安装依赖项。依赖项是按顺序安装的,一个接一个。
NPM 还会创建一个名为package-lock.json的版本锁定文件。Yarn 还支持package-lock.json文件,允许用户将版本数据从 NPM 迁移到 Yarn。
速度和性能
Yarn与NPM哪个更好?如上所述,NPM 是顺序安装依赖包,而 Yarn 是并行安装的。因此,在安装较大的文件时,Yarn 的执行速度比 NPM 快。
这两个工具还提供了在离线缓存中保存依赖文件的选项。这允许用户即使离线也可以安装依赖项。
此外,从版本 2 开始,Yarn 使用零安装功能。此功能从.pnp.cjs文件中获取依赖项映射,并使用它来执行几乎零延迟的离线依赖项安装。
安全
Yarn
Yarn与NPM有哪些区别?Yarn 在下载包时执行安全检查作为后台进程。它使用包许可证信息来确保它不会下载任何恶意脚本或导致任何依赖项冲突。
这两种工具都使用加密协议来确保安全的数据传输。Yarn 使用校验和验证包,而 NPM 使用存储在package-lock.json文件中的 SHA-512(安全哈希算法)。
NPM
安全威胁是 NPM 早期版本中的一个重要问题。从版本 6 开始,每次安装包时,NPM 都会执行安全审核。这有助于防止漏洞并确保没有任何冲突的依赖项。
你还可以使用该npm audit
命令运行手动审计。如果 NPM 发现任何漏洞,使用npm audit fix
应该可以解决问题。
便于使用
Yarn 和 NPM 都相对容易使用,特别是考虑到它们共享多个命令。命令输出通常易于阅读和理解,但在安装大量软件包时可能会在视觉上变得不那么容易区分。
两个包管理器都提供了一种交互模式,可帮助用户设置新项目。在 Yarn 中,此模式默认启用,而 NPM 需要npm-upgrade包才能启用交互性。
特征
Yarn与NPM有哪些不同?Yarn 和 NPM 有几个共同点:
- 生成锁定文件:两个包管理器都会自动创建一个版本锁定文件。在 Yarn 中,该文件名为yarn.lock,而 NPM 将文件命名为package-lock.json。
- 使用工作区: Yarn 和 NPM 都支持工作区,允许你使用单个存储库来管理多个项目的依赖项。
- 远程脚本: NPM 和 Yarn 都允许你远程运行脚本,使用
npx
NPM 中的yarn dlx
命令和 Yarn 中的命令。
Yarn与NPM哪个更好?Yarn 独有的功能:
- 即插即用: Yarn不使用node_modules文件夹,而是生成一个映射项目依赖项的.pnp.cjs文件。这允许更优化的依赖树和更快的项目启动和包安装。
- 零安装:此功能与Plug'n'Play 相关联,使用.pnp.cjs文件映射存储在离线缓存中的包。这允许你几乎没有延迟地访问和安装存储的包。
- 许可证检查: Yarn 在下载和安装软件包时具有内置的许可证检查器。
命令
Yarn与NPM有哪些区别?下表概述了一些 NPM 和 Yarn 最常用的命令:
命令 | NPM | YARN |
---|---|---|
初始化一个项目 | npm init | yarn init |
对当前包运行测试 | npm test | yarn test |
检查过时的包 | npm outdated | yarn outdated |
发布包 | npm publish | yarn publish |
运行脚本 | npm run | yarn run |
管理本地包缓存 | npm cache clean | yarn cache clean |
登入或登出 | npm login/logout | yarn login/logout |
安装依赖 | npm install | yarn |
安装包 | npm install [package name] | yarn add [package name] |
卸载软件包 | npm uninstall [package name] | yarn remove [package name] |
更新管理器 | npm update | yarn upgrade |
更新包 | npm update [package name] | yarn upgrade [package name] |
全局安装包 | npm install --global [package name] | yarn global add [package name] |
全局卸载软件包 | npm uninstall --global [package name] | yarn global remove [package name] |
交互式依赖更新 | npm run upgrade-interactive | yarn upgrade-interactive |
远程运行包 | yarn dlx | |
检查许可证 | yarn licenses ls |
Yarn与 NPM:如何选择
Yarn与NPM哪个更好?在决定使用哪一种时,必须考虑 NPM 和 Yarn 的优缺点。
Yarn
好处
- 支持并行安装和零安装,这两者都显着提高了性能。
- 较新版本的 Yarn 提供了更安全的版本锁定形式。
- 活跃的用户社区。
缺点
- Yarn 不适用于版本 5 之前的 Node.js 版本。
- Yarn 在尝试安装本机模块时出现问题。
NPM
好处
- 易于使用,尤其适合习惯于旧版本工作流程的开发人员。
- 优化本地包安装以节省硬盘空间。
- 简单的用户界面有助于减少开发时间。
缺点
- 如果出现性能问题,在线 NPM 注册表可能会变得不可靠。这也意味着 NPM 需要网络访问权限才能从注册表安装包。
- 尽管在不同版本之间进行了一系列改进,但在安装软件包时仍然存在安全漏洞。
- 命令输出可能难以阅读。
对比总结
Yarn与NPM有哪些区别?考虑到以上所有因素,NPM 更适合习惯它并对其当前工作流程感到满意的开发人员。它提供了合理高效的用户体验,同时还节省了硬盘空间。
另一方面,Yarn 提供更高级的功能,例如即插即用和零安装。它还提供稍好的性能和安全性,但以硬盘空间为代价。
结论
Yarn与NPM有哪些不同?阅读本教程后,你应该对 Yarn 和 NPM 必须提供的内容有更清晰的了解。希望这将帮助你选择最适合你需求的包管理器。