brew、yarn和npm有什么区别?

66

我之前使用全局安装的react-native包(通过npm安装),现在当我执行init命令后,第一行显示如下:

Installing react-native from npm...
Consider installing yarn to make this faster: https://yarnpkg.com

我在查看那个网站时,觉得它很有趣,但我不太清楚它是做什么的。一开始,我认为我需要brew来安装yarn,这样我就可以用yarn来安装npm了。但现在我认为yarnnpm的替代品。这种说法正确吗?

为什么我想要这么多软件包管理器?

我知道像AtomVisual Studio Code这样的软件拥有自己的软件包管理器非常有用。但是在开发方面,我不明白为什么有人想使用四种不同的软件包管理器(brew用于'primary software',yarn用于npm软件包,npm用于后端模块,bower用于前端库)。如何解决这个软件包管理混乱的问题呢?

4个回答

57

我对brew不太熟悉,但我想你指的是macOS上的Homebrew软件包管理系统。

那么每个系统的目的是:

  1. brew:安装软件,即像wget这样的可直接使用的应用程序。
  2. npm:安装包(库),即帮助您构建自己的应用程序的功能模块。
  3. yarn:也是安装包。

相比npm,Yarn具有一些优势,主要有速度和可预测性。Yarn重用了npm的package.json文件,并且不改变其结构。因此,您可以运行yarn install而不是npm install,理论上一切都会自动工作。

P.S. 我同意,https://yarnpkg.com没有足够的背景说明为什么我们需要另一个软件包管理系统,但这里有一篇很棒的文章填补了这个空白。


1
除非npm/yarn还安装了您添加到$PATH并可以像任何其他“软件”一样在命令行上执行的二进制文件。 - neaumusic
基准测试显示,NPM在某些方面仍然更快:https://medium.com/learnwithrahul/is-it-really-worth-switching-to-yarn-from-npm-27781afcb7e5 - DRP
2
Heroku CLI(软件)可以使用npm或brew安装。这是否意味着有一些灰色地带被忽略了?https://devcenter.heroku.com/articles/heroku-cli - kennsorr

6

yarn vs npm

yarn和npm都用于管理模块安装和依赖关系。yarn旨在解决npm的一些缺点。

yarn相比npm的最大优势:

  1. 使用yarn并行安装包,因此安装速度更快。
  2. package.json在版本号方面可以非常宽松。yarn.lock(类似于npm shirkwrap)将其锁定,以便具有相同 package.json 的两台机器始终安装完全相同的软件包。

  3. yarn允许您检查为什么安装了某些软件包(了解依赖树)

参考:https://www.sitepoint.com/yarn-vs-npm/


6

Yarn 是由 Facebook、Google、Exponent 和 Tilde 开发的 JavaScript 包管理器。它被创建来消除或克服 npm 中缺乏的功能。与 npm 相比,它具有:

  • 增强安全性
  • 离线模式
  • 并行安装-因此,安装速度更快

另一个主要区别是 yarn.lock 文件,但在 npm ^5.x.x 版本之后,它们也提供了 package-lock.json 文件。

而且,yarn 的命令与 npm 的命令类似:

# Starting a new project
npm init === yarn init

# Installing all the dependencies of the project
npm install === yarn or yarn install

# Adding a dependency
npm install [package] === yarn add [package] # The package is saved to your package.json immediately.
npm install  [package]@[version] === yarn add [package]@[version]
npm install [package]@[tag] === yarn add [package]@[tag]

# Add a dev dependency
npm install [package] --save-dev === yarn add [package] --dev

# Upgrading a dependency
npm update [package] === yarn upgrade [package]
npm update [package]@[version] === yarn upgrade [package]@[version]
npm update [package]@[tag] === yarn upgrade [package]@[tag]

# Removing a dependency
npm uninstall [package] === yarn remove [package]

# View registry information
npm view [package] === yarn info [package]

# List installed packages
npm list === yarn list
npm list --depth === yarn list --depth=0

# Install packages globally
npm install -g [package] === yarn global addb [package]

# Run a defined package script
npm run [script] === yarn run [script]

参考资料

https://www.sitepoint.com/yarn-vs-npm/

https://web.archive.org/web/20211107145442/https://scotch.io/@brian_kimo/npm-vs-yarn

以及官方公告

https://engineering.fb.com/2016/10/11/web/yarn-a-new-package-manager-for-javascript/


3

Yarn是一个Node.JS的包管理器,和NPM类似。它由Facebook开发,并比NPM更快、功能更多。

它们的主要卖点如下:

  • 安全性:使用yarn.lock文件(类似于NPM的npm-shrinkwrap.json),所有依赖项都锁定在确切的版本上。这样,您就不必再遇到“但在我的机器上可以运行”的问题了,每个人都有相同版本的yarn.lock文件。
  • 速度:Yarn使用(快速)代理和(离线)缓存来更快地提供您的模块。它还具有许可证检查器,用于检查所有依赖模块的许可证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接