如何在 macOS 上更新 npm

107

出于未知原因,我在 macOS 上无法更新到最新版本的 npm(在 Windows 上可以正常工作)。它没有显示任何错误,只显示“已更新1个软件包”。

使用 Node.js 8.11.1

node -v
v8.11.1

我现在使用的npm版本是多少?

$ npm -v
5.6.0

我尝试了这个...

$ npm i -g npm
+ npm@5.8.0
updated 1 package in 7.37s

更新失败。

$ npm -v
5.6.0

npm在哪里?

$ which npm
/usr/local/bin/npm

所以我尝试使用brew...

brew install npm

它失败了...

$ npm -v
5.6.0

*然后我尝试了这个...*

npm install npm@latest -g
+ npm@5.8.0
updated 1 package in 7.618s

它失败了...

npm -v
5.6.0

使用sudo

sudo npm i -g npm
+ npm@5.8.0
updated 1 package in 7.794s

它失败了...

npm -v
5.6.0

这也失败了...

sudo npm install npm@latest -g
我按照这个问题的解答,彻底从系统中删除了npm和node,并重新安装它们,但它仍然无法更新。
截图如下(根据要求): enter image description here 关闭终端,然后重新打开终端并运行:
$ npm -v
5.6.0

sudo twice:


$ sudo npm i -g npm
+ npm@5.8.0
updated 1 package in 7.478s
$ sudo npm i -g npm
+ npm@5.8.0
updated 1 package in 7.434s

同样失败:

$ npm -v 
5.6.0

我错过了什么?这里发生了什么?


你尝试过使用 sudo npm i -g npm 吗? - Squish
@Squish 是的,那是我尝试的第一件事,但我会让它更清晰明了。 - NonCreature0714
请尝试在该情况下使用sudo。输入以下命令:"sudo npm i -g npm",不需要括号。 - Squish
尝试一下这个关于卸载和重新安装npm的线程,也许有些数据已经损坏了。https://dev59.com/gmgu5IYBdhLWcg3wpYjI - Squish
1
能否展示一下终端的截图?这样我就能了解你遇到了什么问题(错误、警告等都会有所帮助)。尝试执行两次“sudo npm install -g npm”。同时,尝试强制退出终端并重新打开以使刷新生效。 - Squish
显示剩余7条评论
9个回答

152

这在我的 Mac 上有效。

根据文档 https://docs.npmjs.com/troubleshooting/try-the-latest-stable-version-of-npm

npm install -g npm@latest

文档中有一条注明,根据您的安装方式,可能需要在某些命令前添加sudo

在*nix(如OSX、Linux等)上升级

(特别是在Linux上或者如果你使用默认安装程序安装Node的OS X上),可能需要在这些命令前加上sudo前缀。


1
对于那些好奇的人,-g 是全局安装标志,如此解释:https://dev59.com/omox5IYBdhLWcg3w44Pb - jeron
9
sudo npm install -g npm@latest 就像魔法一样奏效。 - Abel Callejo
7
不应使用sudo安装npm,否则将在以后的某个地方引起更多的权限问题。有许多不需要sudo就能安装npm的方法,其中之一是使用brew,但Google还有很多其他方法。 - redfox05
尽管我使用brew安装了node,但我无法通过这种方式升级它。必须使用sudo。 - Noumenon

24

npm install -g npm@latest 非常好用!! 你也可以替换"latest"为具体的版本号 例如 npm install -g npm@5.6.0

希望这会有所帮助!!!


19

也许你已经解决了这个问题,但是当我遇到这个问题时,我找到了以下解决方法。我安装了两个不同版本的npm。

我通过以下方式进行验证:

grep \"version\" ~/.npm-packages/lib/node_modules/npm/package.json

  "version": "6.2.0"

grep \"version\" /usr/local/lib/node_modules/npm/package.json

  "version": "5.6.0",

我通过更新我的bash配置文件中的路径来解决了这个问题,但我想知道为什么(如何)我会有两个版本。以下是更新内容:

tail -2 ~/.bash_profile

NPM_PACKAGES="${HOME}/.npm-packages"

PATH="$NPM_PACKAGES/bin:$PATH"

2
我认为人们没有领会这个解决方案的精髓所在。将 /usr/local/lib 路径移除,并从 .npm-packages 中管理 npm,这才是正确方法。 - Raydot
1
尝试了“这个那个”之后,我最终安装了来自nodejs.org软件包安装程序的定制安装(仅安装npm)。 - Alex Fuentes
还要确保在末尾加上:$PATH。在我的情况下,它在开头,导致shell使用了错误的版本。 - user5365075

17
在我的情况下,只有以下内容有所帮助:
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf ~/.npm
brew uninstall --ignore-dependencies node
brew install node

11月21日更新:最近我完全绕过brew,使用“n”:

https://www.npmjs.com/package/n

因此,我也可以在不同的版本之间进行切换。


如果其他的方法都失败了,这个肯定会奏效。这个答案应该排在最前面。 - Punit Vara

15

在我的情况下,之前的回答都没有用。对我来说,一个可行的解决方案是一个简单的五步过程。

  1. 确保(旧版本的)npm已安装。

npm -v

如果npm未安装,则使用Node.js在Mac上安装它。

  1. 全局安装所需版本的npm。
npm install -g npm@latest

此命令使用 Node 安装的旧版 npm,在全局安装最新版本的 npm 到 ~/.npm-global/。安装完成后,请关闭并重新打开一个新的终端窗口。

  1. 删除由 Node 安装的旧版 npm。
rm -r /usr/local/lib/node_modules/npm/

有时这不起作用,所以我不得不进入Finder删除/npm/文件夹。

  1. 确保设置正确的路径变量。
echo $PATH
如果在冒号之间没有显示~/.npm-global/bin,则需要更新路径变量。用文本编辑器打开~/.zshrc并添加以下行。如果您不使用zsh,则打开相应shell的配置文件(即~/.bash_profile)。
export PATH=$PATH:$HOME/.npm-global/bin

保存更改并关闭文本编辑器。

  1. 关闭并重新打开终端,并运行npm -v以检查npm是否正确地安装在最新版本上。

更新路径变量的原因是因为npm cli建议您使用npm install -g npm更新npm,这将在不同于Node原始安装npm的位置安装npm。


5

在我的情况下,我使用 nvm 管理不同版本的 node。为了升级 npm 版本,我需要:

1 - 进入当前版本的 node,安装最新版本的 npm

cd ~/.nvm/versions/node/v10.9.0
npm install npm

或者您可以使用
nvm install-latest-npm

2 - 编辑$PATH并指向您当前版本的node

NPM_PACKAGES="${HOME}/.nvm/versions/node/v10.9.0"
PATH="$NPM_PACKAGES/bin:$PATH"

这个答案的第一部分是,导航到我的虚拟机正在使用的当前版本并在那里安装是对我有用的。就像@Mr.14所说,你要进入节点目录,而不是完全进入npm目录。对于我来说,我的虚拟机的npm安装位置为/usr/local/Cellar/node@8.11.3_1/lib/node_modules/npm(由于10的错误,我被迫使用旧版本),我必须进入/usr/local/Cellar/node@8.11.3_1并执行npm install npm。然后它最终在我的虚拟机中注册了最新版本。 - LeraA

5

我也遇到了同样的问题。 你可能已经安装了npm版本,现在是时候指向新的npm版本安装。您可以按照以下步骤执行此操作。

  1. sudo nano /usr/local/lib/node_modules/npm/package.json
  2. "version": "5.6.0" 更改为 "verison": "5.8.0"

在 MacOS 上也遇到了同样的问题 - 使用 n 运行多个 Node 版本,但无法升级 npm - 必须手动更改全局 node_modules package.config 中的设置。 太好了! - SliverNinja - MSFT
2
这只是更改 CLI 报告的版本,而不是实际使用的版本。 - Matt Molnar
谢谢,这对我很有用,因为我在我的 MacBook 上安装了多个版本的 npm - Kris Stern

0
虽然这可能有点旧,但我也想对这个问题进行一些更新。
通过brew安装了node brew install node@20
安装了最新的npm版本
npm i -g npm@latest
npm -v显示10.1.0
原因是在.zshrc文件中我包含了node@20
export PATH="/usr/local/opt/node@20/bin:$PATH"
更改为
export PATH="$PATH:/usr/local/opt/node@20/bin"
原因是安装了两个版本的npm,$PATH扩展的顺序很重要,如果10.1.0覆盖了10.2.4或者反过来,就会有问题。

-1
在我的 macOS 上,由于已存在的链接文件,Homebrew 安装的 npm 不想升级。我使用了 --force 标志运行安装,现在一切都正常了。
$ npm --version
6.14.16
$ npm install -g npm@8
npm ERR! EEXIST: file already exists, symlink ...
$ npm install -g --force npm@8
npm WARN using --force I sure hope you know what you are doing.
+ npm@8.19.2
$ npm --version
8.19.2

请注意,在我的情况下,由于使用了Homebrew,不需要使用'sudo'。要检查您的npm是否已使用Homebrew安装,请使用brew list命令。
$ brew list | grep node
node@12

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