Yarn 和 NVM 可以在 Windows 上共存吗?
Posted
技术标签:
【中文标题】Yarn 和 NVM 可以在 Windows 上共存吗?【英文标题】:Can Yarn and NVM Coexist on Windows? 【发布时间】:2017-08-23 20:16:09 【问题描述】: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在命令行中不可用(而且它的cmd文件在c:\program files\nodejs中也找不到)。
所以我卸载了 yarn msi。然后我简单地用npm i --global yarn
重新安装了纱线,就像suggested here一样。这最终导致纱线链接到当前的 nvm 控制节点版本。太棒了。
但是,当我再次尝试使用 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 控制的节点版本不同)。我也不知道 yarn 保存这些全局包的文件位置,所以我不确定我可以尝试卸载的“干净”程度。
简而言之,我认为 yarn 和 nvm 不兼容。这是正确的吗?
版本信息
Windows 10 专业版,x64 nvm v1.1.3 纱线 v0.21.3 节点 5.11.0(由 NVM 选择) 节点 7.8.0(由 NVM 选择)更新
我发现issue 1491 可能包含我的答案。我了解到:
-
故意将全局安装的 yarn 包的位置与全局安装的 npm 包的位置不同。
确实存在一个 yarn 错误,它会阻止全局安装的软件包在命令行上可用(doh!)。这违背了全局安装软件包的目的。
Yarn 在 Windows 上保存其数据的位置是
%LocalAppData%\Yarn
我认为在我安装 nvm 之前 yarn 工作的原因仅仅是我没有尝试使用它来安装全局包......因此还没有注意到这个错误。简而言之,我认为使用 nvm 没问题。但是,我现在觉得使用npm i --global yarn
方法安装纱线是在浪费时间……因为纱线无论如何都会简单地将其所有全局包放在一个位置。而且,由于当前的错误,我应该用来安装全局包的唯一工具是 npm 本身。
【问题讨论】:
有些related issue 涉及已记录的二进制版本。另外,请尝试在AppData\Local\Yarn
下查看 Yarn 保存的文件。
【参考方案1】:
你刚才问了,但我刚刚跳过了你的问题。
你可以简单地全局安装yarn作为节点模块:
npm i -g yarn
这在使用 nvm-windows 时效果很好。
附加提示:由于使用 nvm 切换到新的节点版本需要重新安装所有全局安装的节点模块,我开始使用 yarn
而不是 npm
来管理除 npm 和 yarn 本身之外的所有其他全局模块.这样,更新节点就很轻松了。
【讨论】:
以上是关于Yarn 和 NVM 可以在 Windows 上共存吗?的主要内容,如果未能解决你的问题,请参考以下文章
安装nvm后再安装yarn,报'yarn' 不是内部或外部命令