Node.js 如何使用Thread安装多个全局软件包的列表

Node.js 如何使用Thread安装多个全局软件包的列表,node.js,npm,yarnpkg,Node.js,Npm,Yarnpkg,纱线安装-h表明-g(全局)选项已被弃用。我应该如何表明我希望全局安装一组包(来自package.json/warn.lock文件) 我看到的选择: warn global[command]具有ls和add等功能,但不包括install添加仅适用于特定的包名,如果我理解正确的话。我已经准备好了我的warn.lock文件,我不想在命令行上重复我自己 纱线全球添加每个包装一个接一个。现在,我的包列表将是命令式的,而不是声明式的 具体来说,我希望使用其中一个包中的一个可执行文件。我应该如何表示我希

纱线安装-h
表明
-g
(全局)选项已被弃用。我应该如何表明我希望全局安装一组包(来自
package.json
/
warn.lock
文件)

我看到的选择:

  • warn global[command]
    具有
    ls
    add
    等功能,但不包括
    install
    <代码>添加仅适用于特定的包名,如果我理解正确的话。我已经准备好了我的
    warn.lock
    文件,我不想在命令行上重复我自己
  • 纱线全球添加
    每个包装一个接一个。现在,我的包列表将是命令式的,而不是声明式的
具体来说,我希望使用其中一个包中的一个可执行文件。

我应该如何表示我希望全局安装一组包(来自package.json/warn.lock文件)? 你不应该。纱线不鼓励在全球范围内安装,而且很少有必要,甚至有帮助的情况

如图所示:

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

如果您试图使用具有bin的CLI工具,则可以在./node\u modules/.bin目录中访问这些工具

但我真的,真的想! 如果你真的不想听别人的建议,请使用

yarn global add <package>
纱线全局添加
但是,不要期望在全球范围内轻松安装大量依赖项,这很难通过设计实现,因为这不是一个好主意


相反,纱线的预期流动为:

  • 在本地安装所有内容,因此每个项目都是隔离的
  • 尽可能从
    /node\u modules/.bin
    调用二进制文件
  • 避免全球安装它们很方便,但不是你应该依赖的

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

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

mkdir ~/.yarn-global
cd ~/.yarn-global
然后从此处安装应用程序:

yarn add yourapp
最后打开您的配置文件,即
.bashrc
.bash\u profile
并将路径添加到bin目录:

export PATH="$PATH:$HOME/.yarn-global/node_modules/.bin"
从现在起,您在此目录中安装的任何应用程序都可以从shell中的任何位置获得

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

sudo vim /usr/bin/yarn-global
sudo chmod 755 /usr/bin/yarn-global
脚本内容将是:

#!/bin/bash
cd "$HOME/.yarn-global"
yarn $1 "$2"
现在,您可以执行
纱线全局添加someapp
纱线全局升级someapp
,等等。

只需键入

纱线全局添加节点

npm安装-g标记toc


纱线决定不支持此功能。

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

因此,您必须将其导出为:

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

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

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

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

npm install -g yarn
确保系统上已经安装了节点。使用上述命令,可以全局安装纱线包


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

感谢您的回复!当然,对我来说,Thread采用一些本地第一种思维是有道理的,因为最终,每个成熟的开发人员都需要使用他们的依赖关系。我详细阐述的用例是,我正在制作一个docker图像,作为(GitLab)CI步骤的一部分,用于对项目进行lint。所以我并不真正需要隔离,因为这个映像的唯一目的是使用
eslint.js
可执行文件。我认为您在这方面有点太严格了。有很多命令行工具与项目无关,而是与我的shell环境有关,它们绝对是作为全局安装的最佳工具。虽然这通常是个坏主意,但像PM2这样的东西通常会在全球范围内安装。当然,“你没有”是针对问题提出的在全球范围内安装一批软件包的建议。我并不是说你不能在全球范围内安装软件包。在有限的情况下,在全球范围内安装一个软件包是有用的,这就是为什么有这样的功能(尽管有一点摩擦)。@Aurora0001实际上是的,我有。出于与OP类似的目的,我的隔离就是我的docker形象。它是构建和运行的,没有人需要知道文件在其中是如何分布的。相反,他们应该查看源代码。但是,由于我希望将源文件装载到映像中,因此每次保存时容器都会重新编译,我不希望将机器上的节点模块与容器(不同)平台中的节点模块混合使用。安装