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
。但现在我认为yarn
是npm
的替代品。这是正确的说法吗?
我为什么要拥有这么多包管理器?
我知道对于像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】:Yarn 和 NPM 一样,是 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 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
yarn.lock 和 npm 的 package-lock 有啥区别?
`yarn link` 和 `npm link` 有啥区别?