node.js - Yarn 和 NVM 可以在 Windows 上共存吗?

标签 node.js windows npm nvm yarnpkg

在我决定需要多个版本的 Node 之前,Yarn 一直在为我工作。所以我按照 the following guide 中的说明卸载了 yarn 并安装了 nvm。

然后我使用 msi 安装程序成功地重新安装了 yarn。不幸的是,yarn global add [name]a location seemingly spanning all nvm-controlled node versions 中安装了包,但他们都同样无法访问。也就是说,npm 找不到 yarn 全局安装的任何东西。或者,比如用yarn全局安装gulp后,发现gulp在命令行下不可用(并且在c:\program files\nodejs中找不到它的cmd文件)。

所以我卸载了yarn msi。然后,我使用 npm i --global yarn 重新安装了 yarn,如 suggested here .这最终导致 yarn 链接到当前 nvm 控制的 Node 版本。太棒了。

然而,当我再次尝试用 yarn 安装全局包时,我发现它们没有正确安装。例如我跑了:

nvm use 5.11.0
yarn global add jspm gulp karma karma-cli

软件包安装成功,但是当我从命令行尝试“gulp”时,它不可用。此外,当我 npm ls --global --depth=1 时,我发现我安装的软件包无处可寻。如果我尝试 yarn global ls --depth=0 它需要很长时间才能告诉我我的包(jspm、gulp、karma、karma-cli)实际上已经安装了。

更糟糕的是,我后来决定执行以下操作:

nvm use 7.3.0    //fresh node install...no packages installed
npm i --global yarn
yarn global ls

然后 yarn 命令向我显示了我在 nvm use 5.11.0 生效时全局安装的相同包。简而言之,yarn 坚持某种全局安装位置(与 nvm 控制的 Node 版本看到的不同)。我也不知道 yarn 保存这些全局包的文件位置,所以我不确定我可以尝试卸载的“干净”程度。

简而言之,我认为 yarn 和 nvm 不兼容。这是正确的吗?

版本信息

  • Windows 10 专业版,x64
  • nvm v1.1.3
  • yarn v0.21.3
  • Node 5.11.0(由 NVM 选择)
  • Node 7.8.0(由 NVM 选择)

更新

我找到了 issue 1491可能包含我的答案。我了解到:

  1. 全局安装的 yarn 包的位置有意与 npm 的全局安装包位于不同的位置。
  2. 确实存在一个 yarn 错误,它会阻止全局安装的包在命令行上可用(doh!)。这违背了全局安装包的目的。
  3. Yarn 在 Windows 上保存数据的位置是 %LocalAppData%\Yarn

我认为 yarn 在我安装 nvm 之前工作的原因很简单,我没有尝试使用它来安装全局包......因此还没有注意到这个错误。总之,我觉得用nvm没问题。但是,我现在觉得使用 npm i --global yarn 方法来安装 yarn 是在浪费我的时间……因为无论如何 yarn 都会简单地将其所有全局包放在一个位置。而且,由于当前的错误,我唯一应该用来安装全局包的工具是 npm 本身。

最佳答案

你刚才问了,但我刚刚跳过了你的问题。

您可以简单地将 yarn 安装为全局 Node 模块:

 npm i -g yarn

这在使用 nvm-windows 时非常有效。

附加提示:由于使用 nvm 切换到新 Node 版本需要重新安装所有全局安装的 Node 模块,因此我开始使用 yarn 而不是 npm 进行管理除了 npm 和 yarn 本身之外的所有其他全局模块。这样,更新 Node 就很轻松了。

关于node.js - Yarn 和 NVM 可以在 Windows 上共存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43108816/

相关文章:

node.js - 在Node.js中使用try..catch进行错误处理

node.js - 在 application/octet-stream 中使用 restify 设置内容类型 header

PHP 脚本未在命令提示符 Windows 7 中运行

windows - 在 Cruisecontrol 中设置环境变量

javascript - 为 "scripts"使用单独的文件

node.js - Nodejs 错误 : Global connection already exists. 首先调用 sql.close()

node.js - 在nodejs中使用nodemailer发送通知邮件

javascript - 管理 Node.js Redis 客户端中的唯一哈希键

asp.net - 如何从自托管 nancy 更改为 iis 下

node.js - 包含 JSON 文件作为 Webpack 输出,但不属于 bundle.js