Yarn 和 NPM 的全局模块

3
过去我使用npm全局安装了一些模块。 现在我开始一个新项目,想要开始使用yarn。
我不确定如果我使用yarn全局安装一个新模块会发生什么。 Yarn会转换全局node_modules目录吗? 还是我需要删除全局目录并重新安装每个模块?
2个回答

6

NPM

  • bin被链接到$(npm prefix -g)/bin
  • module被安装到$(npm prefix -g)/lib/node_modules

YARN

  • bin被链接到yarn global bin
  • module被安装到yarn global dir

您可以配置 yarn 使用 npm 的配置:

  • 配置binyarn config set prefix $(npm prefix -g)
  • 配置module,我不建议您将 yarn 配置为使用 npm 使用的路径,这会删除 npm,即使您全局安装了一个软件包也是如此。

    如果您敢尝试,请执行以下操作:

    yarn global add react --global-folder $(npm prefix -g)/lib


我正在尝试使用yarn,全局模块的可执行文件默认位置将在"\AppData\Local\Yarn\Data\global\node_modules.bin"。我对..\node_modules@angular\cli\bin感到困惑。 - Mohit Sharma

0

你可以通过 yarn global ls 命令轻松找到全局 bin 的位置。

从文档中,你也可以指定 bin 的位置:

yarn global bin 命令将输出 Yarn 安装符号链接到已安装可执行文件的位置。你可以使用 yarn config set prefix 命令配置基本位置。例如,yarn config set prefix ~/.yarn 将确保所有全局包的可执行文件安装到 ~/.yarn/bin。

默认位置是在 ~/.config/yarn/global。

Yarn 全局文档


1
那么在解析模块时,Node会使用Yarn的全局目录还是npm的全局目录? - Tomek Dobrzynski
默认情况下,它将使用Yarn,但您可以配置为使用npm的。 - Nutatello
我猜yarn是通过将其路径添加到某个环境变量中,然后node使用该变量来解析模块的。 - Tomek Dobrzynski
通过安装符号链接来完成,详细步骤请参考:https://yarnpkg.com/en/docs/cli/global - 如果你想将其指向node bins,可以使用以下命令:yarn config set prefix <filepath> - Nutatello
不,Node不知道yarn或npm。但是yarn和npm知道Node。所以,npm和yarn必须更新Node的运行时配置。当Node评估require函数时,它会应用其解析策略,该策略在其模块子系统中实现,并最终扫描一系列可配置的路径。因此,我相信如果模块X由npm和yarn全局安装,那么npm的全局路径将首先生效。 - Tomek Dobrzynski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接