【问题标题】:How to install a list of many global packages with Yarn如何使用 Yarn 安装许多全局包的列表
【发布时间】:2022-04-16 22:11:57
【问题描述】:

yarn install -h 建议-g(全局)选项是DEPRECATED。我应该如何表明我想要全局安装一堆包(来自package.json / yarn.lock 文件)?

我看到的选项:

  • yarn global [command]lsadd 之类的东西,但没有 installadd 仅适用于特定的包名称,如果我理解正确的话。我已经准备好我的yarn.lock 文件,我不想在命令行上重复自己。
  • yarn global add每个包裹一个一个。现在我的包列表将是强制性的,而不是声明性的。

具体来说,我想使用其中一个包中的一个可执行文件。

【问题讨论】:

    标签: node.js npm yarnpkg


    【解决方案1】:

    简单输入

    yarn global add nodejs
    

    【讨论】:

    • 这看起来像一个内置的,怎么不是公认的答案?可能是最近的?
    • 这似乎并没有为我的路径添加东西。以这种方式安装后我无法运行 cli 程序
    • @Vadorequest 因为它实际上不是一个答案。该问题有一个描述,这与标题的情况略有不同。
    • @no1xsyzy 确实!
    【解决方案2】:

    我应该如何表明我想要全局安装一堆包(来自 package.json / yarn.lock 文件)?

    你不应该。 Yarn 不鼓励全局安装,在极少数情况下它是必要的,甚至是有帮助的。

    the documentation中所述:

    对于绝大多数包来说,拥有全局依赖项被认为是一种不好的做法,因为它们是隐式的。最好在本地添加所有依赖项,这样它们是显式的,并且使用您项目的其他任何人都可以获得相同的依赖项集。

    如果您尝试使用具有 bin 的 CLI 工具,您可以在 ./node_modules/.bin 目录中访问这些工具。

    但我真的,真的很想!

    如果您真的不想听取所提供的建议,请使用

    yarn global add <package>
    

    但是,不要期望在全局范围内轻松安装大量依赖项 - 这很难按设计,因为这不是一个好主意。


    相反,Yarn 的预期流程是:

    • 在本地安装所有内容,因此每个项目都是独立的
    • 尽可能从./node_modules/.bin 调用二进制文件
    • 避免全局安装 - 它们很方便,但您不应该依赖它。

    【讨论】:

    • 感谢您的回复!当然,对我来说,yarn 采用某种本地优先的思维是有道理的,因为最终,这就是每个成熟的开发人员都需要使用他们的依赖项的方式。我的用例(详细说明)是我正在制作一个 docker 图像,用于作为(GitLab)CI 步骤的一部分对项目进行 lint。所以我真的不需要隔离,因为这个图像的唯一目的是使用eslint.js 可执行文件。
    • 我觉得你有点太严格了。有很多命令行工具与项目无关,而是与我的 shell 环境相关联,这些绝对最好作为全局安装。
    • 我同意 Tommi 的观点。虽然通常是个坏主意,但像 PM2 这样的东西通常会在全局范围内安装。
    • 当然——“you don't”是针对问题的建议,即全局安装一批包。我并不是说您永远无法在全球范围内安装软件包。在有限的情况下,全局安装包是有用的,这就是功能存在的原因(尽管有一点摩擦)。
    • @Aurora0001 实际上是的,我愿意。出于与 OP 类似的目的。我的隔离是我的 docker 镜像。它是构建和运行的,没有人需要知道文件是如何分布在其中的。他们应该查看源代码。但是,由于我想将源文件挂载到映像中,因此每次保存时容器都会重新编译,并且我不想混合我机器上的节点模块和容器(不同)平台中的节点模块。从 package.json 安装但全局安装会更容易安装所需的文件夹,我会失去隔离或可发现性
    【解决方案3】:

    对于那些感兴趣的人,这里有一种安装和管理通过 yarn 安装的全局应用程序的方法。

    首先创建一个包含应用程序的目录,例如~/.yarn-global

    mkdir ~/.yarn-global
    cd ~/.yarn-global
    

    然后从这里安装您的应用程序:

    yarn add yourapp
    

    最后打开你的配置文件,即.bashrc.bash_profile并添加bin目录的路径:

    export PATH="$PATH:$HOME/.yarn-global/node_modules/.bin"
    

    从现在开始,您在此目录中安装的任何应用程序都可以在您的 shell 中的任何位置使用。

    完成此操作后,您甚至可以创建一个仅在此 .yarn-global 目录中运行的 yarn-global 实用程序脚本。例如:

    sudo vim /usr/bin/yarn-global
    sudo chmod 755 /usr/bin/yarn-global
    

    脚本内容是:

    #!/bin/bash
    cd "$HOME/.yarn-global"
    yarn $1 "$2"
    

    现在你可以做yarn-global add someappyarn-global upgrade someapp等。

    【讨论】:

    • 现在应该是export PATH="$PATH:$HOME/.yarn/bin"
    【解决方案4】:

    Yarn 将所有全局包添加到您家中的 .yarn 文件夹:~/.yarn/bin

    所以你必须将它导出为:

    export PATH="$PATH:$HOME/.yarn/bin"
    

    或将其添加到主文件夹中的 .bashrc 文件中

    【讨论】:

      【解决方案5】:

      随着容器化成为本地应用程序开发和部署到每个环境的规范,这些约定变得不那么相关。每个容器镜像都是它自己的服务器,您可以使用 Dockerfile 和 docker-compose(或其他容器化应用程序的方法)与其他开发人员共享整个开发环境。使用这种策略,我可以在部署到 prod 的确切环境上进行开发,例如操作系统、库、版本等。但是,在 Mac 或 Windows 机器上开发容器化应用程序需要虚拟机 + 本地主机挂载目录到 VM,然后从 VM 挂载 docker 卷。当 node_modules 是该卷安装的一部分时,这运行得非常缓慢。如果开发人员可以改善他们的开发体验,为什么不能选择做一些不“推荐”的事情?我认为这应该重新审视。

      【讨论】:

      • 尝试回答OP的问题,对于像这样的cmets,他们真的应该作为cmets发布。
      【解决方案6】:

      对于全局纱线安装,只需键入

      yarn global add nodejs
      

      确保您的系统上已经安装了 Node。使用上述命令,可以全局安装纱线包。

      注意 - “安装”现在已替换为“添加”(这仅适用于软件包)

      【讨论】:

        【解决方案7】:

        Yarn 2,以其无限的智慧,删除了yarn global

        如果你想运行一个包,比如firebase-tools,你现在可以通过yarn dlx firebase-tools &lt;parameters&gt;来运行,而不是安装它然后调用已安装的包。

        这是一个糟糕的决定,我希望 Yarn 能够恢复它。

        【讨论】:

          【解决方案8】:

          npm install -g markdown-toc

          Yarn 决定不支持此功能。

          【讨论】:

          • 1.仅凭标题,问题并不完整; 2. yarn 支持全局安装。
          猜你喜欢
          • 1970-01-01
          • 2021-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-21
          • 2021-04-13
          • 1970-01-01
          • 2019-05-26
          相关资源
          最近更新 更多