Homebrew:在node@8旁边安装最新的npm版本

3
情况:
我正在使用node的LTS版本,即node@8,并通过homebrew在macOS High Sierra上安装了它。它自带版本为npm v5.6.0
当我输入which node时,我也会得到/usr/local/opt/node@8/bin/node,这是node@8包内部的npm版本。
当我运行npm install -g npm时,控制台输出:
/usr/local/bin/npx -> /usr/local/lib/node_modules/npm/bin/npx-cli.js
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
+ npm@6.3.0
added 1 package and updated 3 packages in 9.884s

尽管如此,npm --version仍然显示我正在使用5.6.0版本。

问题:

在此情况下,如何使用Homebrew或npm独立更新npm6版本,而不涉及node


1
echo $PATH 的输出是什么? - Ortomala Lokni
@OrtomalaLokni 我的 echo $PATH 输出的开头是 /usr/local/opt/node@8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin。我现在确保在我的 PATH 中 /usr/local/opt/node@8 出现在 /usr/local/bin 之后,现在运行 npm --version 时我得到了 6.3.0。谢谢! :-) 我会把它做成一个适当的回复。 - Andru
1个回答

2

简短版:

确保在PATH中,usr/local/bin出现在/usr/local/opt/node@8/bin之前。


详细版:

安装node@8时,因为某些原因我将export PATH=/usr/local/opt/node@8/bin:$PATH添加到了我的.bash_profile(或者在你的情况下可能是.bash_rc)中,这使得/usr/local/opt/node@8/bin被放置在我的路径的开头,也就是说,我的PATH的前几个条目是:usr/local/opt/node@8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ...

在这种情况下,npm首先在/usr/local/opt/node@8/bin中搜索可执行文件(并找到指向版本5的/usr/local/opt/node@8/bin/npm),然后才会在/usr/local/bin中搜索(在那里它将找到指向版本6的/usr/local/bin/npm)。

所以我从.bash_profile中删除了export PATH=/usr/local/opt/node@8/bin:$PATH。我也可以在.bash_profile中更改该条目为export PATH=$PATH:/usr/local/opt/node@8/bin,这样会将/usr/local/opt/node@8/bin添加到PATH的末尾而不是添加到PATH的开头。

现在,npm首先在/usr/local/bin中搜索可执行文件并找到版本6。

感谢@OrtomalaLokni在评论中指出了PATH。


附加说明: 将/usr/local/opt/node@8/bin添加到PATH中并不是必需的,因为brew link node@8会为node创建一个符号链接,当运行ls -lh /usr/local/bin/npm时可以看到,也就是说,/usr/local/bin/node指向/usr/local/opt/node@8/bin/node

现在我无法回忆起最初为什么要将/usr/local/opt/node@8/bin添加到PATH中。


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