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

时间:2016-01-11 09:56:59

标签: node.js npm prefix nvm

我正在尝试使用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而不会丢失全局安装包的前缀?

19 个答案:

答案 0 :(得分:246)

删除并重置前缀

$ 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的信用 - "You need to overwrite nvm prefix"

答案 1 :(得分:55)

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

但是这样做了:

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

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

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

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

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

更多信息

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

  

请注意,上游要求我们明确管理      通过Homebrew的nvm不受他们的支持,你应该检查任何      报告之前针对标准nvm安装方法的问题。

     

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

 mkdir ~/.nvm
     

将以下内容添加到~/.bash_profile或您想要的shell中      配置文件:

 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会导致终端启动缓慢。您可以follow this instruction解决此问题。

答案 2 :(得分:28)

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

  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
  4. 你无法安装nvm

答案 3 :(得分:9)

如果您的主目录已安装在某处,则可能是问题,因为nvm无法与符号链接一起正常工作。因为我不在乎我的$ NVM_DIR在哪里,我运行这个并且一切正常:

Dim nam As String
nam = "Archive " & format(now()-2, "mmm yyyy")

答案 4 :(得分:8)

我在使用通过nvm安装的节点时遇到了这个问题,并通过自制程序安装了nvm。我通过运行brew uninstall nvmrm -rf $NVM_DIR解决了这个问题,然后使用official install script重新安装了nvm并重新安装了我需要的节点版本。

注意:我还安装了$NVM_DIR和符号链接。我把它搬回了我的家乡。

答案 5 :(得分:6)

enter image description here我遇到了同样的问题,每次使用终端时都很烦人。我将命令运行到终端并修复了

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

仅仅酿造卸载nvm

可能还不够

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

  

sudo rm -rf   的/ usr /本地/ {LIB /节点{,/。NPM,_modules},bin中,共享/人} / {NPM *,节点*,MAN1 /节点*}

答案 6 :(得分:5)

当您的 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"

答案 7 :(得分:1)

对于那些首先通过自制软件安装 node 然后将 nvm 添加到系统的人。

如果您看到嘈杂的消息:nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local 您可能需要删除 node_modules 和节点本身,解决方案已在上面完美描述^^,但下面是简单的方法。

由于 brew 自动将 env var 添加到 .bash_profile,所以每次 bash 加载的路径都指向原来安装的版本。

1.转到./.bash_profile 2. 注释指向节点的行,像这样 #export PATH="/usr/local/opt/node@10/bin:$PATH"

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

答案 8 :(得分:1)

我已经尝试了此线程中的所有答案,但都没有奏效。使用 nvm 重新安装 https://github.com/nvm-sh/nvm 中记录的 curl 解决了我的问题。

答案 9 :(得分: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"

然后编辑我的.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。我想这是一个奇怪的情况,如果发生错误并迫使我重新安装所有内容,由于这个问题,看来大多数人都无法解决。

答案 10 :(得分: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

答案 11 :(得分:0)

对我来说,我删除了线条

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

PATH="$NPM_PACKAGES/bin:$PATH"

从我的 .bashrc 并且能够在不需要 npm install -g package-name 权限或在我的 shell 窗口中显示错误消息的情况下运行 sudo

答案 12 :(得分:0)

我有相同的错误消息,但有其他解决方案。 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"

答案 13 :(得分:0)

当它在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

答案 14 :(得分:0)

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

答案 15 :(得分: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

答案 16 :(得分:0)

将我的主文件夹移动到linux上的新驱动器后,我遇到了这个问题。通过删除.nvm文件夹并重新安装nvm

来解决此问题

答案 17 :(得分:0)

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

在使用npm config delete prefix之前我尝试nvm use --delete-prefixnpm --prefix="" set prefix ""时,我只得到: 错误的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

答案 18 :(得分:-2)

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