为啥我不用 npm 来安装 yarn?

Posted

技术标签:

【中文标题】为啥我不用 npm 来安装 yarn?【英文标题】:Why wouldn't I use npm to install yarn?为什么我不用 npm 来安装 yarn? 【发布时间】:2017-02-22 20:47:27 【问题描述】:

在the blog post announcing yarn (an alternative npm client) 中,他们说,“最简单的开始方法是运行npm install -g yarn”。但是,如果您转到the "install yarn" page in their docs,“npm install yarn”不会列在任何特定于平台的安装页面上,它仅作为“替代”页面上三个选项中的第三个提供。此外,当您npm install yarn 时,它会打印一条弃用警告,“建议使用适合您环境的本机安装方法安装 Yarn。”所以我的问题是如果npm install 是最简单的安装方法,为什么他们的文档中没有推荐它?使用npm安装yarn有什么坏处吗?

【问题讨论】:

npm install 肯定是列出来的:yarnpkg.com/en/docs/install#install-via-npm @halfpastfour.am 当我访问该链接时,它会将我重定向到yarnpkg.com/en/docs/install#mac-stable,它没有将 npm 列为安装方法 好的,试试这个并向下滚动yarnpkg.com/en/docs/install#alternatives-stable @halfpastfour.am 正如问题文本中所述,npm 确实被列为“替代”页面上三个选项中的第三个。 【参考方案1】:

编辑(2020/11/23):

感谢 @Kissaki 在 cmets 中提供 Yarn 建议的最新信息。

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

来自新 Yarn "Installation" page:

在整个系统中使用单个包管理器一直是 问题。为了稳定,安装需要使用相同的包运行 跨环境的管理器版本,否则我们有风险 在版本之间引入意外的重大更改 - 毕竟, 这就是为什么首先引入了lockfile的概念! 从某种意义上说,Yarn 是你的第一个项目依赖项,它 “锁定”也应该有意义。

因此,Yarn 2 及更高版本应在 以项目为基础。

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

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


原答案:

据 Yarn 项目维护人员称,通过 npm goes against the goals of the project 安装 Yarn 可能会导致问题,并且通常比特定于平台的安装方法更糟糕。


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

Yarn 团队认为 npm 不安全且不可靠。来自 Yarn 的 "Installation" page 上的“通过 npm 安装”部分:

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

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

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

npm install -g yarn的优势:

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

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

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

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


来源:

npm vs system package manager explanation Additional explanation Short comment on the "app" vs "npm package" goal for Yarn Issue on how to keep Windows Yarn up to date

【讨论】:

意见:似乎真正的答案是因为 yarn 是 npm 的竞争对手。所以他们需要一条不涉及 npm 的采用路径。我个人同意 yarn 更好,但我觉得说安装另一个包管理器(Homebrew)有点傻,比使用已经安装的 npm 更好,可以跨平台工作,并且可以在项目之间进行版本控制。跨度> 另一种观点:最简单、更灵活的方式是通过curl -o- -L https://yarnpkg.com/install.sh | bash。他们的建议是有道理的;当愿意安装依赖管理器时,为什么要依赖?我认为这是主要原因;商业竞争是公平的,因为他们甚至建议将 NPM 作为方法之一。只是,由于他们编写了一个软件来弥补过去几年 NPM 及其开发过程所造成的混乱,很明显他们强调了它的所有缺陷,并劝阻不要将其用作 Yarn 的起点。 另一种观点:如果yarn真的更好(我同意),那么是否使用npm安装并不重要。我们都知道你上次打开 IE 是为了下载 Chrome。 我认为使用 npm 安装 yarn 时出现的缓存问题问题也可能在以其他方式安装时出现,所以我觉得呈现这样的东西是有偏见的。 这似乎不再是这种情况。 3 年后(对此答案),可安装版本 1 托管在 yarn 网站的 only on the 'classic' subdomain 上。 The main Installation page 谈到版本 1 和 2,而 2 是 1 的继承者。它也只谈到 npm install 进行安装。所以看起来现在和未来 npm 工具是要走的路。【参考方案2】:

通过npm 安装 Yarn 没有明显的缺点。其实我自己选择这个方法有几个原因:

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

【讨论】:

【参考方案3】:

因为npm 不是特定于平台的,并且几乎可以在任何系统上运行,所以它被列为备选方案。平台特定安装没有优势或劣势。不同之处在于安装位置,但所有方法都将全局 yarn 命令暴露给 CLI。

我认为他们将其列为“最简单的方法”,因为大多数人已经非常熟悉 npm

【讨论】:

以上是关于为啥我不用 npm 来安装 yarn?的主要内容,如果未能解决你的问题,请参考以下文章

Yarn 中“npm install --save”的等价物是啥?

yarn 学习总结以及一些常安装的插件

npm 通过package.json来安装第三方包

vue 升级element-ui woff文件404

Yarn v3.0.2 为啥不安装 node_modules 文件夹?需要在 yarn 的命令之后运行 npm install 吗?

sass教程之--sass的安装