nvm与npm config的“ prefix”选项不兼容:


208

我正在尝试运行另一个NodeJS版本,nvm但出现此错误:

$ 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而不会丢失全局安装软件包的前缀?


我使用npm config delete前缀来解决这个问题,到目前为止没有问题
ggdx

@DanWhite如果删除前缀,我将无法将全局安装转移到专用目录中。
Dmitri Zaitsev

5
(这里是nvm维护者)。使用nvm,它(而不是您)可以管理全局安装。另外,绝对不要在节点版本之间共享全局安装。
LJHarb'3

2
每个节点副本都具有自己的npm,npm确定其自己的设置。
LJHarb'3

1
确实,每个带有nvm的选定节点版本都是基于外壳的-这是设计使然。
LJHarb'3

Answers:


378

删除并重置前缀

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

注意:使用错误消息中指示的版本号更改版本号。

nvm与npm config“ prefix”选项不兼容:当前设置为“ / usr / local”运行“ npm config delete prefix”或“ nvm use --delete-prefix v6.11.1 --silent”来取消设置。


感谢Github上的@gabfiocchi- “您需要覆盖nvm前缀”


10
这就像一个魅力!只是不得不抓住我的节点版本。
Sirius_B

我似乎有一个符号链接/ usr / local / bin / node,它将使vscode中的集成终端看到它不应该看到的节点版本。按照上述步骤操作,然后删除符号链接,似乎已解决了该问题。我的节点和npm现在由nvm管辖
Sudhanshu Mishra,

这很完美。只是不要错过设置节点版本的前缀,您将要使用。 npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren '18

3
这仅在当前窗口中有效。如果打开新的外壳或新的窗口,则必须重新做一遍。
jtiscione

3
我必须按顺序做这些。1. nvm使用--delete-prefix vx.xx-静默2. npm配置删除前缀3. npm配置设置前缀$ NVM_DIR / versions / node / vx.xx
Shen

66

我有同样的问题,执行npm config delete prefix并没有帮助我。

但是这样做:

使用brew安装nvm之后,创建~/.nvm目录:
$ mkdir ~/.nvm

并将以下行添加到~/.bash_profile

export NVM_DIR=~/.nvm
. $(brew --prefix nvm)/nvm.sh

(检查是否在~/.bashrc~/.profile或中没有其他与nvm相关的命令~/.bash_profile

打开一个新终端,这次它不应该打印任何警告消息。
通过执行nvm --version命令检查nvm是否正常工作。
之后,使用安装/重新安装NodeJS nvm install node && nvm alias default node

更多信息

我安装nvm使用homebrew,之后收到此通知:

请注意,上游要求我们不支持通过Homebrew显式管理nvm,因此在报告之前,您应对照标准nvm安装方法检查任何问题。

如果不存在,则应创建NVM的工作目录:

 mkdir ~/.nvm

将以下内容添加到~/.bash_profile您所需的外壳程序配置文件中:

 export NVM_DIR=~/.nvm
 . $(brew --prefix nvm)/nvm.sh

您可以将其设置$NVM_DIR为任何位置,但是将其保留不变 /usr/local/Cellar/nvm/0.31.0将在升级/重新安装时销毁所有安装了nvm的Node。

忽略它使我出现以下错误消息:

nvmnpm config“前缀”选项不兼容:当前设置为"/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
“运行” nvm use --delete-prefix v5.7.1 --silent以取消设置。

我遵循了先前的指南(来自homebrew/nvm),然后发现我需要重新安装NodeJS。所以我做了:

nvm install node && nvm alias default node

它是固定的。

更新: 使用brew安装NVM会导致终端启动缓慢。您可以按照以下说明解决它。


6
nvm alias default node在我看来,这似乎对我有所帮助
mirkobrankovic

28
nvm通过brew安装时,不支持(此处为nvm维护者)。请卸载它,并使用适当的方法(自述文件中的curl脚本)。
LJHarb'3

3
我使用curl脚本进行安装nvm。这个答案对我不起作用。
intcreator

1
@intcreator谢谢。我终于实现了使用基于本指南NVM节点的完整的全新安装:nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm而我挂断结束了,我以前有使用自制软件安装,不再受支持。它留下了很多残留的内容,需要一些时间来清除,然后我不得不再次rm -rf node_modules运行npm install,因为目录已经存在严重的权限问题。
杰克·T

1
为了后代的清晰起见,我必须执行brew remove node -f,删除所有已安装的版本。首先执行此操作,然后按照上面我的链接中的指南进行操作,然后删除node_modules。您应该获得全新安装!我认为您还必须安装npm,我只是按照搜索时弹出的nodejs.org文章中的说明进行操作。npm install npm@latest -g安装节点后,该命令就是命令。
杰克T.

31

这可能与您在本地安装Node时发生冲突(如果以前通过NVM以外的其他方式安装了Node)。您应该删除以下节点实例:

  1. 删除node_modules sudo rm -rf /usr/local/lib/node_modules
  2. 删除节点 sudo rm /usr/local/bin/node
  3. 删除节点链接 cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

无法安装nvm之后


9
您想通过一些解释来扩充纯代码答案吗?这些注释还不够,因为您的命令行比它们所解释的更加复杂。详细说明您的答案为何能解决问题。将您的答案与多年的答案进行对比。是什么使您的答案对该问题有附加价值?
Yunnosch

对我来说,空的第一行代码(您最近添加了)需要自己解释...
Yunnosch

在StackOverflow上使用了五个月之后,请考虑进行非常有启发性的指导式帮助之旅
Yunnosch

尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中添加解释性注释,这会降低代码和解释的可读性!
菲诺

“无法安装nvm之后”那么,如果我的目标是使用nvm,我不应该这样做吗?
杰克T.

18

当您的NVM安装文件夹路径具有符号链接时,可能会发生此错误。

说明

NVM的默认安装路径是:$HOME/.nvm但是您的主文件夹可能是另一个驱动器的符号链接,例如我的情况。

例如,我的主文件夹是到另一个驱动器的符号链接:

/home/myuser -> /bigdrive/myuser

这导致前缀问题。

在启动脚本(.bashrc或.zshrc或其他)上,将NVM文件夹更改为直接路径。

例如:NVM_DIR="/bigdrive/myuser/.nvm"

.bashrc

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

谢谢!你的答案应该有更多的知名度

不。我动脑筋了解这个疯狂的错误。我找不到任何对我有帮助的帖子。我不得不努力解决这个问题。很高兴为您服务。投票让我的答案更显眼。
安德烈·阿夫拉(AndréAvelar)

我应将$ NVM_DIR回显为“ /Users/vijayshanker/.nvm”,如果我将“ export NVM_DIR =“ / Users / vijayshanker / .nvm(和其余)”放在bashrc中,则尝试但仍未解决,一直在努力6个小时,请帮忙注意:我没有安装npm,我没有从npm安装节点
vijay shanker 19/11/2

一种解决方案可能是在.bashrc或命令行中导出NVM_DIR = $(readlink -f“ $ HOME / .nvm”)。这将从$ HOME / .nvm中删除所有符号链接,并导出仅包含真实目录的纯完整路径。
Nimlar

10

在使用通过homebrew安装的节点时nvm,我遇到了这个问题nvm。我通过运行brew uninstall nvm,解决了问题rm -rf $NVM_DIR,然后使用正式的安装脚本重新安装了nvm 并重新安装了所需的节点版本。

注意:我也已经$NVM_DIR安装并符号链接。我将其移回我的homedir。


8

如果您的主目录安装在某个位置,则可能是问题所在,因为nvm在符号链接中无法正常工作。因为我不在乎我的$ NVM_DIR在哪里,所以我运行了它,并且一切正常:

$ mv ~/.nvm /tmp/
$ export NVM_DIR="/tmp/.nvm"
$ nvm use --delete-prefix v6.9.1

6

在此处输入图片说明我遇到了同样的问题,每次使用终端时都非常烦人。我运行命令到终端,它是固定的

对于那些尝试从brew中删除nvm的人

仅仅冲煮卸载nvm可能还不够

如果看到npm前缀仍然是/ usr / local,请运行此命令

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}


4

我有相同的错误消息,但其他解决方案。curl(install.sh)期间自动生成的路径不匹配。使用以下方法检查:

echo $NVM_DIR

就我而言:/var/www//.nvm。在自动生成的bash文件中显示并更改并替换:(〜/ .bash_profile,〜/ .zshrc,〜/ .profile或〜/ .bashrc)

更换

export NVM_DIR="$HOME/.nvm"

与(例如)

export NVM_DIR="$HOME.nvm"

来这里发表同样的评论:)就我而言,是因为当我创建用户时,我将home设置为useradd --home / home / user /,并在结尾加上了/我从/ etc / passwd文件中删除了所有内容,一切正常再次
以色列

1

我遵循了https://stackoverflow.com/a/47861348/2391795的答案,但效果不佳。

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

运行推荐的命令后,我的nvm不再起作用,运行nvm use将显示正在使用的正确节点版本,但是运行node -v将显示另一个节点版本。不再可能更改节点的版本。

我完全卸载并重新安装了nvm来修复它。我通过运行遵循https://github.com/creationix/nvm#manual-uninstall

$ rm -rf "$NVM_DIR"

然后编辑my .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"

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

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

哪个添加了nvm我以前在我中删除的行 .zshrc

然后,我可以像以前一样使用nvm。我想这是一个奇怪的情况,如果发生错误并迫使我重新安装所有内容,由于这个问题,大多数人似乎都无法通过。


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"

因此,我删除了C:\\Program Files\\nodejs/mnt/c/Users/paul/.npmrc中的。


1

当它在VSCode和JetBrains终端上显示但不在本机终端上显示时,我使用以下命令解决了此问题:

ls -la /usr/local/bin | grep "np[mx]"

最后将为您提供解析路径:

... npm -> ../lib/node_modules/npm/bin/npm-cli.js
... npx -> ../lib/node_modules/npm/bin/npx-cli.js

从那里删除文件并重新启动VS Code应该可以解决此问题:

rm -R /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm -R /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

修复链接:https : //github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774


0

我正在寻找nvm前缀问题的解决方案,发现了这个问题(找到解决方案之前)。这是我的shell“对话框”。我希望它对某人有用。我可以在这篇文章的帮助下设置前缀:https : //github.com/npm/npm/issues/6592

当我尝试使用之前npm config delete prefixnvm use --delete-prefix使用时npm --prefix="" set prefix "",我只有:npm ERR!错误代码0

请注意,您将必须对每个节点版本重复相同的过程,在安装后,将前缀设置回(对于我而言)/ usr / local。

    $ nvm install 0.10
    ######################################################################## 100.0%
    nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ npm --prefix="" set prefix ""
    $ nvm use 0.10.44
    nvm is not compatible with the npm config "prefix" option: currently set to "/home/john"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ nvm use --delete-prefix v0.10.44
    Now using node v0.10.44 (npm v1.3.10)
    $ nvm ls
    v0.10.44
             v4.4.3
    ->       system
    default -> 4.4.3 (-> v4.4.3)
    node -> stable (-> v4.4.3) (default)
    stable -> 4.4 (-> v4.4.3) (default)
    iojs -> N/A (default)
    $ npm config get prefix
    /usr/local


0

刚刚解决了这个问题。我链接$HOME/.nvm$DEV_ZONE/env/node/nvm目录。我面临着同样的问题。我换过NVM_DIR$HOME/.zshrc如下

export NVM_DIR="$DEV_ZONE/env/node/nvm"

顺便说一句,请使用curlwget命令而不使用来安装NVM brew。有关更多信息,请在Github上查看本期中的评论:855#issuecomment-146115434


怎么样安装nvm使用npm
Dmitri Zaitsev '18

1
正式建议不要通过自制软件安装nvm,并且由于不兼容而导致出现问题。官方方法是使用curl / wget,请参见github.com/creationix/nvm#install-script请参见github.com/creationix/nvm/issues/298#issuecomment-152255091不支持通过npm安装AFAIK,因为nvm已安装npm,因此,如果npm还安装了nvm,则可能会导致严重问题。您可以阅读有关我先前链接的问题的信息。
Vadorequest '19

0

我只是有一个主意。使用符号链接解决错误,并且仍可以对全局安装的软件包使用前缀。 ln -s [your prefix path] [path in the '~/.nvm'] 那么您将在该~/.nvm文件夹中有一个符号文件夹,但是实际上,您的全局软件包仍安装在[您的前缀路径]中。然后错误将不再显示,您可以nvm use **正常使用。ps:在上对我有用mac。pps:别忘了设置$PATH为您的npm bin文件夹以使用全局安装的软件包。


-2

注意:
要删除,删除或卸载nvm-只需删除$NVM_DIR文件夹(通常是~/.nvm),
您可以尝试:
rm -rf ~/.nvm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.