nvm与npm配置中的"prefix"选项不兼容。

305

我正在尝试使用nvm运行另一个NodeJS版本,但出现了以下错误:

$ nvm use v4.2.4

nvm is not compatible with the npm config "prefix" option: 
   currently set to "/Users/z/.npm-global"
Run `npm config delete prefix` or `nvm use --delete-prefix v4.2.4` to unset it.

我故意设置了前缀以避免使用sudo npm(请参见https://docs.npmjs.com/getting-started/fixing-npm-permissions)。

是否有任何方法可以在使用nvm的情况下保留全局安装包的前缀?


1
我使用 npm config delete prefix 来解决这个问题,目前还没有任何问题。 - ggdx
1
@DanWhite 如果我删除前缀,就会失去将全局安装转移到专用目录的功能。 - Dmitri Zaitsev
13
那就是重点。使用nvm后,它而不是你来管理全局安装。另外,全局安装不应该在不同的Node版本间共享。 - LJHarb
3
每个 Node 的副本都带有自己的 npm,它确定了自己的设置。 - LJHarb
1
确实,使用nvm选择的每个节点版本都是针对每个shell的 - 这是设计上的考虑。 - LJHarb
显示剩余6条评论
23个回答

2

我尝试了这个线程中的所有答案,但没有一个有效。按照https://github.com/nvm-sh/nvm上记录的方法,使用curl重新安装nvm解决了我的问题。


1
哇,这节省了我很多时间。我只需要运行这个命令就可以重新启动了!curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash - Roger Garza

1

对于那些通过homebrew首次安装node,然后将nvm添加到系统中的人。

如果您看到嘈杂的消息:nvm与npm配置"prefix"选项不兼容:当前设置为"/usr/local,您可能需要删除node_modules和node本身,解决方案已经在上面完美描述^^,但下面是简单的方法。

由于brew自动将env变量添加到.bash_profile中,每次bash加载路径都指向最初安装的版本。

1.进入./.bash_profile 2.注释掉指向node的行,如下所示 #export PATH="/usr/local/opt/node@10/bin:$PATH"

下一次bash应该加载由nvm安装的node, 确保bash_profile包含nvm目录 export NVM_DIR="/Users/{your_user_name}/.nvm"


1
以下的 sh 文件对我的情况很有帮助。
# nvmish.sh
unset npm_config_prefix
source $HOME/.nvm/nvm.sh
nvm use 18

1

让我描述一下我的情况。

首先,检查当前配置。

$ nvm use --delete-prefix v10.7.0
$ npm config list

然后,我在输出中找到了错误配置:

; project config /mnt/c/Users/paul/.npmrc
prefix = "/mnt/c/Users/paul/C:\\Program Files\\nodejs"

所以,我在 /mnt/c/Users/paul/.npmrc 中删除了 C:\\Program Files\\nodejs


1
我按照https://dev59.com/FVsW5IYBdhLWcg3wqYx7#47861348的答案操作,但效果不佳。
$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

在运行推荐的命令后,我的nvm不再工作了。运行nvm use会显示正确的Node版本,但运行node -v会显示另一个版本。无法再更改Node的版本。为了解决这个问题,我完全卸载并重新安装了nvm。我按照https://github.com/creationix/nvm#manual-uninstall进行操作。
$ rm -rf "$NVM_DIR"

然后我编辑了我的.zshrc文件,删除了与nvm相关的行,这些行在我的情况下是:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

然后启动一个新的 shell(这样在这个新的 shell 中就不会加载 nvm),并运行 https://github.com/creationix/nvm#install-script

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

我之前在.zshrc文件中删除了一些内容,现在又加入了nvm相关的代码。

这样我就能像以前一样使用nvm了。我猜这是一个很奇怪的情况,导致我不得不重新安装所有东西,似乎大多数人并没有经历这种问题。


0

我有一个想法。使用符号链接来解决错误,您仍然可以使用前缀全局安装的软件包。 ln -s [your prefix path] [path in the '~/.nvm'] 然后你会在~/.nvm文件夹里看到一个符号文件夹,但实际上,你的全局软件包仍然安装在[your prefix path]中。然后错误就不会再出现了,你可以正常使用nvm use **了。 ps:这在我的mac上有效。 pps: 别忘了将$PATH设置为npmbin文件夹,以便使用全局安装的软件包。


0

我在将我的home文件夹移动到Linux上的新驱动器后遇到了这个问题。通过删除.nvm文件夹并重新安装nvm来解决了这个问题。


0

这是我所做的并对我有效的方法:

1- sudo su

2-root@antonio:/home/antonio# mv ~/.nvm /tmp/

3- root@antonio:/home/antonio# export NVM_DIR="/tmp/.nvm"

4- root@antonio:/home/antonio# nvm use --delete-prefix v17.4.0

5- `root@antonio:/home/antonio# node -v

enter image description here`


0

我遇到了同样的问题,这是由于 node 和 nodejs 的 npm 冲突导致的。

因此,请使用以下命令卸载 nodejs:

sudo apt-get remove nodejs

这将删除所有与Node.js相关的软件包,

在执行上述命令后,您需要像这样运行autoremove命令。

sudo apt autoremove

这将解决问题。


0

对我来说,我删除了这些行

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

PATH="$NPM_PACKAGES/bin:$PATH"

从我的.bashrc文件中,我能够运行npm install -g package-name而不需要sudo权限或在我的shell窗口中出现错误信息。

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