nvm 与 npm config "prefix" 选项不兼容:

Posted

技术标签:

【中文标题】nvm 与 npm config "prefix" 选项不兼容:【英文标题】:nvm is not compatible with the npm config "prefix" option: 【发布时间】:2016-04-15 14:01:41 【问题描述】:

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

【问题讨论】:

我使用 npm config delete prefix 来解决这个问题,目前没有问题 @DanWhite 如果我删除前缀,我将无法将全局安装转移到专用目录中。 (这里是 nvm 维护者)这就是重点。使用 nvm,管理您的全局安装的是它,而不是您。另外,全局安装不应该跨节点版本共享。 每个节点副本都有自己的npm,它决定了自己的设置。 确实,每个带有 nvm 的选定节点版本都是每个 shell 的 - 这是设计使然。 【参考方案1】:

删除并重置前缀

$ 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"

【讨论】:

这就像一个魅力!只需要获取我的节点版本。 我似乎有一个符号链接 /usr/local/bin/node 会导致 vscode 中的集成终端看到它不应该看到的节点版本。按照上述步骤然后删除符号链接似乎已经解决了这个问题。我的节点和 npm 现在由 nvm 管理 这很完美。只是不要错过为节点版本设置前缀,您将使用。 npm config set prefix $NVM_DIR/versions/node/<node-version-directory> 这仅适用于当前窗口。如果你打开一个新的 shell 或一个新的窗口,你必须从头再来。 我必须按顺序做这些。 1. nvm use --delete-prefix vx.x.x --silent 2. npm config 删除前缀 3. npm config 设置前缀 $NVM_DIR/versions/node/vx.x.x【参考方案2】:

我遇到了同样的问题,执行 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。

更多信息

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

请注意,上游已要求我们进行明确的管理 他们不支持通过 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 安装的节点安装 升级/重新安装时。

忽略它让我看到此错误消息:

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解决。

【讨论】:

nvm alias default node 似乎对我有帮助 (此处为 nvm 维护者)nvm 通过 brew 安装时不受支持。请卸载它并使用正确的方法,即自述文件中的 curl 脚本。 我使用 curl 脚本安装了nvm。这个答案对我不起作用。 @intcreator 谢谢。我最终根据本指南使用 nvm 进行了全新的节点安装:nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm 我的挂断最终是我以前使用自制软件安装的,不再受支持。它留下了很多需要一段时间才能清除的残留物,然后我不得不rm -rf node_modules 并再次运行npm install,因为这些目录已经存在严重的权限问题。 为了后代的清晰,我不得不做一个brew remove node -f,它会删除所有已安装的版本。首先执行此操作,然后按照我上面链接中的指南进行操作,然后删除 node_modules。你应该得到一个干净的安装!我认为您还必须安装 npm,我只是按照我搜索它时弹出的 nodejs.org 文章中的说明进行操作。 npm install npm@latest -g 是命令,一旦你安装了节点。【参考方案3】:

这可能与您本地安装的 Node 有冲突(如果您过去通过 NVM 以外的其他方式安装它)。你应该删除这个节点实例:

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

无法安装nvm后

【讨论】:

您想通过一些解释来扩充您的纯代码答案吗? cmets 是不够的,因为您的命令行比它们解释的要复杂得多。详细说明为什么您的答案的细节可以解决问题。将您的答案与多年前的答案进行对比。是什么让您的回答成为这个问题的附加值? 对我来说,空的第一行代码(您最近添加的)需要自己解释... 在 *** 上使用了五个月后,考虑接受非常有启发性的指导帮助 tour。 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性! "在你无法安装 nvm 之后" 那么,如果我的目标是使用 nvm,我不应该这样做吗?【参考方案4】:

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

【讨论】:

谢谢!你的答案应该有更多的知名度 不。为了理解这个疯狂的错误,我绞尽脑汁。我没有找到任何对我有帮助的帖子。我不得不努力解决问题。我很乐意帮助你。为我的答案投票,让更多人看到。 我的回显 $NVM_DIR 是 "/Users/vijayshanker/.nvm" 我应该把 "export NVM_DIR="/Users/vijayshanker/.nvm(and the rest)" 放在 bashrc 中,试过但它仍然没修好,苦苦挣扎了6个小时,请帮忙注意:我没有安装npm,我没有从npm安装我的节点 一种解决方案可能是在 .bashrc 或命令行中导出 NVM_DIR=$(readlink -f "$HOME/.nvm") 。这将从 $HOME/.nvm 中删除所有符号链接并导出仅包含真实目录的纯完整路径。 export HOME="/big/drive/myuser" 这应该更有弹性。虽然对于您的情况,我只会使用 fstab 绑定安装它。如果这会导致更多问题,我可能会走那条路。【参考方案5】:

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

注意:我还安装了 $NVM_DIR 并进行了符号链接。我把它移回了我的 homedir。

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

来到这里发表相同的评论 :) 就我而言,是因为当我创建用户时,我将主页设置为 useradd --home /home/user/ 并从 / 中删除了尾随 / etc/passwd 文件,一切重新开始工作【参考方案8】:

我遇到了同样的问题,每次使用终端都非常烦人。我将命令运行到终端并修复了

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

仅仅 brew uninstall nvm 可能还不够

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

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

【讨论】:

哇,这为我节省了一个时代的时间。我所做的就是运行它并重新启动并运行! curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash【参考方案11】:

我关注了https://***.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(这样 nvm 就不会加载到这个新的 shell 中)并运行 https://github.com/creationix/nvm#install-script

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

添加了我之前在.zshrc 中删除的行的 nvm。

然后我就可以像以前一样使用 nvm 了。我想这是一个奇怪的情况,如果出现问题并迫使我重新安装所有东西,看起来大多数人都不会因为这个问题而经历这个。

【讨论】:

【参考方案12】:

让我描述一下我的情况。

首先,检查当前配置

$ 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

【讨论】:

【参考方案13】:

对于那些首先通过自制程序安装节点然后将 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 目录 导出 NVM_DIR="/Users/your_user_name/.nvm"

【讨论】:

【参考方案14】:

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

当我在使用npm --prefix="" set prefix "" 之前尝试npm config delete prefixnvm use --delete-prefix 时,我只得到: npm 错误!代码不正确 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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

刚刚解决了这个问题。我将$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

【讨论】:

安装nvmnpm怎么样? 通过自制软件安装 nvm 已被正式弃用,并且由于某些不兼容性而导致问题。官方的方法是使用 curl/wget,见github.com/creationix/nvm#install-script 见github.com/creationix/nvm/issues/298#issuecomment-152255091 AFAIK 不支持通过 npm 安装,因为 nvm 安装 npm,所以如果 npm 也安装 nvm 可能会导致边缘情况。您可以阅读我之前链接的问题。【参考方案17】:

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

【讨论】:

【参考方案18】:

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

NPM_PACKAGES="$HOME/.npm-packages"

PATH="$NPM_PACKAGES/bin:$PATH"

从我的.bashrc 运行npm install -g package-name 无需sudo 权限或错误消息出现在我的shell 窗口中。

【讨论】:

【参考方案19】:

我遇到了同样的问题,这是因为node和nodejs的npm冲突

所以通过以下命令删除 nodejs

sudo apt-get remove nodejs

这将删除所有与 nodejs 相关的包,

在上面的命令之后,你必须像那样运行 autoremove 命令

sudo apt autoremove

这样就可以解决问题了,

【讨论】:

【参考方案20】:

这是我为我所做的和为我工作的

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

`

【讨论】:

【参考方案21】:

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

【讨论】:

以上是关于nvm 与 npm config "prefix" 选项不兼容:的主要内容,如果未能解决你的问题,请参考以下文章

安装 nvm 后无法卸载全局 npm 包

nvm的安装,安装node,npm

nvm的安装,安装node,npm

ubuntu下nvm,node以及npm的安装与使用

有没有办法在预启动 npm 脚本中自动运行“nvm use”?

npm install 问题解决(nvm安装与使用)