【问题标题】: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 的替代品。这是正确的说法吗?

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

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

【问题讨论】:

    标签: npm homebrew bower package-managers yarnpkg


    【解决方案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 最大的优势是

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

      3. 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软件包管理系统。

          那么每个系统的目的是:

          1. brew:安装软件,即准备使用 wget 等应用程序。
          2. npm:安装包(库),即帮助您构建自己的应用程序的功能。
          3. 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
          猜你喜欢
          • 2019-01-28
          • 2017-03-29
          • 2021-04-26
          • 2017-11-13
          • 2018-10-21
          • 2017-02-22
          • 2018-03-06
          • 2016-04-28
          • 1970-01-01
          相关资源
          最近更新 更多