为什么我不用 npm 来安装 yarn?

新手上路,请多包涵

宣布 yarn(另一种 npm 客户端)的博客文章中,他们说:“最简单的入门方法是运行 npm install -g yarn ”。但是,如果您转到 他们文档中的“安装纱线”页面,则“npm install yarn”不会列在任何特定于平台的安装页面上,它仅作为“替代方案”页面上三个选项中的第三个提供.此外,当您使用 npm install yarn 时,它会打印一条弃用警告,“建议使用适合您环境的本机安装方法安装 Yarn。”所以我的问题是,如果 npm install 是最简单的安装方法,为什么他们的文档中没有推荐它?使用 npm 安装纱线有缺点吗?

原文由 Chris Arnesen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

编辑(2020 年 11 月 23 日):

感谢 @Kissaki 在评论中提供 Yarn 建议的更新。

从 Yarn 2.x 开始,Yarn 团队改变了他们的建议,现在建议通过 npm 安装该工具。此建议围绕锁定每个项目使用的 Yarn 版本的优势。这使项目能够适应不同版本的 Yarn 的变化。

从新的纱线 “安装”页面

在您的系统中使用单个包管理器一直是个问题。为了稳定,安装需要在不同环境中使用相同的包管理器版本运行,否则我们可能会在版本之间引入意外的破坏性更改 - 毕竟,这就是首先引入 lockfile 概念的原因!从某种意义上说,Yarn 是您的第一个项目依赖项,因此“锁定它”也应该是有意义的。

出于这个原因,Yarn 2 及更高版本旨在按项目进行管理。

这类似于基于每个项目锁定构建工具版本的其他方法。有关示例,请参阅 Gradle Wrapper

独立 Yarn 安装的优势很快就消失了,尤其是随着 Yarn 团队方向的改变。现在建议通过 npm 安装,并且从 Yarn 2.x 开始,他们的网站上似乎不再提供独立安装的说明。


原答案:

根据 Yarn 项目维护人员的说法,通过 npm 安装 Yarn 违背了项目的目标,可能会导致问题,并且通常比特定于平台的安装方法更糟糕。


推荐的特定平台安装的优点:

  • Yarn 团队认为 npm 不安全且不可靠。从 Yarn 的 “安装”页面 上的“通过 npm 安装”部分:

注意: 一般不推荐通过 npm 安装 Yarn。使用 npm 安装 Yarn 是不确定的,包没有签名,唯一执行的完整性检查是基本的 SHA1 哈希,这在安装系统范围的应用程序时是一个安全风险。

由于这些原因,强烈建议您通过最适合您的操作系统的安装方法来安装 Yarn。

  • 通过 npm 运行 Yarn,它是一个单独的包管理器实用程序,可能会导致边缘问题(请参阅 issue 2072
  • 通过系统包管理器安装将 Yarn 与 npm 分离,允许您在没有 npm 的情况下运行 Yarn
  • 系统包管理器通常会定期运行,保持 Yarn 更新
  • 通过 npm 安装 Yarn 很

npm install -g yarn 的优点:

  • 快速简单( npm install -g yarn
  • 可以在任何 npm 环境中完成(与平台无关)
  • Node.js 开发人员熟悉的范式和流程
  • 可以轻松更新( npm update -g yarn
    • 存在纱线更新命令( yarn self-update ),但似乎已 损坏
  • 不依赖系统包管理器
  • 可以通过 nvm 为不同的项目或不同版本的Node.js使用不同版本的Yarn

推荐安装的系统包管理器参数在提到没有官方包管理器的 Windows 时往往会崩溃(除非您计算 Windows 更新)。此外,Chocolatey 等 Windows 包管理器通常不会配置为自动更新。

我不确定我是否完全同意 Yarn 团队对此的决定,但他们确实提出了一些公平的观点。 Yarn 项目还很年轻,如果它要成为 npm 的替代品,那么鼓励 npm 作为其主要安装程序是没有意义的。

无论如何,在大多数情况下,现在通过 npm 安装似乎都可以正常工作。


资料来源:

原文由 Mike Hill 发布,翻译遵循 CC BY-SA 4.0 许可协议

通过 npm 安装 Yarn 没有明显的缺点。事实上,我自己选择这种方法是因为以下几个原因:

  1. 这显然是最简单的方法。 npm i --global yarn 您可以立即在您的控制台上将 npm 替换为 yarn
  2. 如果您正在使用 nvm 并在每个 NodeJS 版本上维护不同的代码项目,那么您可以在一个版本上安装 Yarn 而在另一个版本上不安装它
  3. 老实说,我能想到的在平台特定安装中没有提到它的唯一原因是 npm 是平台不可知的

原文由 nikjohn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题