brew、yarn 和 npm 有啥区别?

Posted

技术标签:

【中文标题】brew、yarn 和 npm 有啥区别?【英文标题】:What is the difference between brew, yarn, and npm?brew、yarn 和 npm 有什么区别? 【发布时间】:2017-03-16 17:58:44 【问题描述】:

我使用的是react-native 包,它是通过npm 全局安装的。现在它在执行init 命令后的第一行显示。以下:

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

所以我查看了那个网站,我觉得它看起来很有趣,但我不知道它会是什么。一开始我以为我需要brew来安装yarn,所以我可以用yarn来安装npm。但现在我认为yarnnpm 的替代品。这是正确的说法吗?

我为什么要拥有这么多包管理器?

我知道对于像Atom 或Visual Studio Code 这样的软件来说,拥有自己的包管理器很有用。但是对于开发,我看不出有人愿意使用四种不同的包管理器的原因(brew 用于“主要软件”,yarn 用于npm 包,npm 用于后端模块,bower 用于前端库)。如何解开这个包管理器森林?

【问题讨论】:

【参考方案1】:

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://scotch.io/@brian_kimo/npm-vs-yarn

以及官方公告

https://code.facebook.com/posts/1840075619545360

【讨论】:

【参考方案2】:

yarn 与 npm

yarn 和 npm 都是管理模块安装和依赖项。 Yarn 旨在解决 npm 的一些缺点。

yarn 相比 npm 最大的优势是

    使用 yarn 安装包是并行的,因此包安装速度更快。

    package.json 在版本号方面可能非常松散。 yarn.lock(类似于 npm shirkwrap)将其锁定,以便具有相同 package.json 的两台机器始终安装完全相同的包。

    yarn 允许您检查某些软件包的安装原因(了解依赖关系树)

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

【讨论】:

【参考方案3】:

YarnNPM 一样,是 Node.JS 的包管理器。 Yarn 由 Facebook 打造。 它比 NPM 速度更快,功能更多。 他们的主要卖点是:

yarn.lock 文件的安全性(类似于 NPM 的 npm-shrinkwrap.json) 所有依赖项都锁定在确切的版本上。因此,您不再有“但它适用于我的机器”的困扰了。每个人都有 yarn.lock 文件中锁定的相同版本 Speed Yarn 使用(快速)代理和(离线)缓存来交付您的 模块更快。它还有一个 LICENSE 检查器,用于检查 您所有依赖模块的许可证。

【讨论】:

【参考方案4】:

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

那么每个系统的目的是:

    brew:安装软件,即准备使用 wget 等应用程序。 npm:安装包(库),即帮助您构建自己的应用程序的功能。 yarn:也可以安装包。

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

附:我同意,https://yarnpkg.com 没有足够的背景说明为什么我们需要另一个包管理系统,但there is a great article 填补了这个空白。

【讨论】:

除非 npm/yarn 还安装了您添加到 $PATH 的二进制文件,并且可以像任何其他“软件”一样在命令行上执行 ? 基准测试表明 NPM 在某些方面仍然更快:medium.com/learnwithrahul/… Heroku CLI(软件)可以使用 npm 或 brew 安装。这是否意味着缺少一些灰色区域? devcenter.heroku.com/articles/heroku-cli

以上是关于brew、yarn 和 npm 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

何时在 NPM 上使用 Yarn?有啥区别?

yarn.lock 和 npm 的 package-lock 有啥区别?

yarn run 和 npm start 有啥区别?

`yarn link` 和 `npm link` 有啥区别?

brew install XXX 和 brew cask install XXX 有啥区别

yarn 和 npm 的主要区别是啥? [关闭]