如何使用Yarn安装许多全局软件包的列表


69

yarn install -h建议-g(global)选项为DEPRECATED。我应该如何指示要在全球范围内安装一堆软件包(来自package.json/yarn.lock文件)?

我看到的选项:

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

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

Answers:


45

我应该如何指示我要在全球范围内安装一堆软件包(来自package.json / yarn.lock文件)?

你不应该。Yarn不建议在全球范围内进行安装,在极少数情况下,有必要,甚至没有帮助。

文档所述

对于绝大多数软件包,由于它们是隐式的,因此具有全局依赖性被认为是不好的做法。最好在本地添加所有依赖项,以便它们是显式的,并且使用您的项目的其他任何人都将获得相同的依赖项集。

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

但是我真的非常想要!

如果您真的不想听给出的建议,请使用

yarn global add <package>

但是,不要指望在全球范围内轻松安装大量的依赖项-很难通过设计来完成,因为这不是一个好主意。


相反,使用Yarn的预期流程是:

  • 在本地安装所有内容,因此每个项目都是隔离的
  • ./node_modules/.bin可能的地方调用二进制文件
  • 避免进行全局安装-这是一种便利,但您不应依靠它。

3
感谢您的答复!当然,对我来说,yarn采用某种本地优先的想法对我来说很有意义,因为最终,这就是每个成年人的开发人员都需要使用其依赖项的方式。我的用例(在上面进行了详细说明)是在制作一个Docker映像,该映像用于在(GitLab)CI步骤的一部分上填充项目。因此,我实际上不需要隔离,因为此映像的唯一目的是使用eslint.js可执行文件。
jleeothon

72
我认为您在那里太严格了。有很多与项目无关的命令行工具,但与我的shell环境无关,绝对最好将它们用作全局安装。
Tommi Kyntola '18

1
我同意Tommi对此的看法。虽然通常是个坏主意,但PM2之类的东西通常会在全球范围内安装。
罗恩

当然,“您不要”是针对该问题的建议,即在全球范围内安装一批软件包。我并不是说您永远无法在全球范围内安装软件包。在少数情况下,全局安装软件包很有用,这就是为什么有功能的原因(尽管有一点摩擦)。
Aurora0001 '18

1
@ Aurora0001实际上是的。出于与OP类似的目的。我的隔离是我的docker映像。它是构建并运行的,没有人需要知道文件在其中的分布方式。他们应该查看源代码。但是,由于我想将源文件安装到映像中,因此容器在每次保存时都会重新编译,因此我不想混合计算机上的节点模块和容器(不同)平台中的节点模块。从package.json安装但在全局范围内安装将使安装所需的文件夹更加容易,而我将失去隔离或发现的能力
Rune FS

67

只需输入

yarn global add nodejs

2
这看起来像是内置的,为什么它不是公认的答案?也许是最近的?
Vadorequest

1
这似乎并没有为我添加任何东西。以这种方式安装它们后,我无法运行cli程序
BT

3
@Vadorequest因为它实际上不是答案。该问题具有说明,与标题的情况略有不同。
InQβ

@ no1xsyzy确实!
Vadorequest '19

15

对于那些感兴趣的人,这是一种安装和管理通过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等等。


1
它应该是export PATH="$PATH:$HOME/.yarn/bin"现在
阿戈斯特比罗

1

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


尝试回答OP的问题,对于此类评论,应将其真正发布为评论。
Alper Akture

0

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

因此您必须将其导出为:

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

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


-2

对于Global yarn,只需键入

npm install -g yarn

确保您已经在系统上安装了Node。使用以上命令可以将纱线包整体安装。

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


-4

npm install -g markdown-toc

Yarn决定不支持此功能。


1
1.这个问题并不单单是标题。2.纱线支架在全球安装。
InQβ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.