O nvm não é compatível com a opção npm config “prefix”:

208

Estou tentando executar outra versão do NodeJS, nvmmas obtendo este erro:

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

Eu tenho meu prefixo definido de propósito a evitar sudo npm(consulte https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Existe alguma maneira de usar nvmsem perder meu prefixo para pacotes instalados globalmente?

Dmitri Zaitsev
fonte
Eu uso npm configuração de prefixo de exclusão de contornar este problema, nenhum problema até agora
ggdx
@ DanWhite Se eu excluir o prefixo, perco o desvio de minhas instalações globais no diretório dedicado.
Dmitri Zaitsev
5
(mantenedor da nvm aqui) Esse é o ponto. Com o nvm, ele, não você, gerencia suas instalações globais. Separadamente, as instalações globais nunca devem ser compartilhadas entre as versões dos nós.
LJHarb
2
Cada cópia do nó vem com seu próprio npm, que determina suas próprias configurações.
LJHarb
1
De fato, cada versão de nó selecionado com nvm é por shell - isso é por design.
LJHarb

Respostas:

379

Excluir e redefinir o prefixo

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

Nota: Altere o número da versão com o indicado na mensagem de erro.

O nvm não é compatível com a opção npm config "prefix": atualmente definido como "/ usr / local" Executar "npm config delete prefix" ou "nvm use --delete-prefix v6.11.1 --silent" para desmarcá-lo.


Créditos para @gabfiocchi no Github - "Você precisa substituir o prefixo nvm"

Mick
fonte
10
Isso funcionou como um encanto! Só tive que pegar minha versão do nó.
31518 Sirius_B
Eu parecia ter um link simbólico / usr / local / bin / node que faria com que o terminal integrado no vscode visse uma versão do nó que não deveria ter visto. Seguir as etapas acima e excluir o link simbólico parece ter corrigido o problema. Meu nó e npm agora são governados pela nvm
Sudhanshu Mishra
isso funciona perfeito. só não deixe de definir o prefixo da versão do nó, você vai usar. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren
3
Isso funciona apenas na janela atual. Se você abrir um novo shell ou uma nova janela, precisará fazer tudo novamente.
jtiscione
3
Eu tenho que fazer isso em ordem. 1. uso da nvm --delete-prefix vx.xx --silent 2. prefixo de exclusão da configuração do npm 3. prefixo do conjunto de configurações do npm $ NVM_DIR / versions / node / vx.xx
Guangtong Shen
66

Eu tive o mesmo problema e a execução npm config delete prefixnão me ajudou.

Mas isso fez:

Após instalar o nvm usando o brew, crie o ~/.nvmdiretório:
$ mkdir ~/.nvm

e adicione as seguintes linhas em ~/.bash_profile:

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

(Verifique se você não tem nenhum outro comando relacionado à nvm em algum ~/.bashrcou ~/.profileou ~/.bash_profile)

Abra um novo terminal e, desta vez, ele não deve imprimir nenhuma mensagem de aviso.
Verifique se o nvm está funcionando executando o nvm --versioncomando
Depois disso, instale / reinstale o NodeJS usando nvm install node && nvm alias default node.

Mais informações

Eu instalei nvmusando homebrewe depois recebi esta notificação:

Observe que o upstream solicitou que o gerenciamento explícito da nvm via Homebrew não seja suportado por eles e você deve verificar quaisquer problemas com relação ao método de instalação padrão da nvm antes dos relatórios.

Você deve criar o diretório de trabalho do NVM se ele não existir:

 mkdir ~/.nvm

Adicione o seguinte ~/.bash_profileou o arquivo de configuração de shell desejado:

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

Você pode definir $NVM_DIRpara qualquer local, mas deixá-lo inalterado /usr/local/Cellar/nvm/0.31.0destruirá todas as instalações do Nvm instaladas na atualização / reinstalação.

Ignorá-lo me levou a esta mensagem de erro:

nvmnão é compatível com a npm configopção "prefixo": atualmente definida como "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Executar nvm use --delete-prefix v5.7.1 --silentpara desativá-la.

Segui um guia anterior (de homebrew/nvm) e depois descobri que precisava reinstalar o NodeJS. Então eu fiz:

nvm install node && nvm alias default node

e foi consertado.

Atualização: O uso do brew para instalar o NVM causa uma inicialização lenta do Terminal. Você pode seguir estas instruções para resolvê-lo.

SMMousavi
fonte
6
nvm alias default nodePareceu-me ajudou no meu caso
mirkobrankovic
28
(mantenedor da nvm aqui) nvmnão é suportado quando instalado via brew. Desinstale-o e use o método apropriado, o script curl no leia-me.
LJHarb
3
Eu usei o script curl para instalar nvm. Esta resposta não funcionou para mim.
Intcreator 14/0318
1
@intcreator Obrigado. Acabei fazendo uma nova instalação completa do nó usando o nvm com base neste guia: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm E meu hangup acabou sendo o que eu tinha anteriormente instalado usando o homebrew, que não é mais suportado. Deixou muitos remanescentes que demoraram um pouco para serem limpos e, em seguida, tive que rm -rf node_modulesexecutar npm installnovamente, pois os diretórios já tinham problemas de permissões complicados.
Jake T.
1
Para maior clareza da posteridade, tive que fazer um brew remove node -f, que remove todas as versões instaladas. Faça isso primeiro, siga o guia no meu link acima e remova node_modules. Você deve obter uma instalação limpa! Acho que você também precisa instalar o npm, que acabei de seguir as instruções de um artigo do nodejs.org que apareceu quando o procurei. npm install npm@latest -gfoi o comando, depois de instalar o nó.
Jake T.
31

Isso pode ser um conflito com a instalação local do Node (se você o tiver instalado de outra maneira que o NVM no passado). Você deve excluir esta instância do nó:

  1. remover node_modules sudo rm -rf /usr/local/lib/node_modules
  2. remover nó sudo rm /usr/local/bin/node
  3. remover link do nó cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Depois de instalar o nvm

Curador
fonte
9
Deseja aumentar sua resposta apenas de código com algumas explicações? Os comentários não são suficientes, porque suas linhas de comando são mais complexas do que explicadas por elas. Explique por que os detalhes da sua resposta resolvem o problema. Compare sua resposta com as respostas mais antigas do ano. O que faz da sua resposta um valor agregado a esta pergunta?
Yunnosch
Para mim, a primeira linha de código vazia (que você adicionou recentemente) precisa de sua própria explicação ...
Yunnosch
Após cinco meses no StackOverflow, considere fazer o tour de ajuda guiado muito esclarecedor .
Yunnosch
Embora esse trecho de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código. Tente também não sobrecarregar seu código com comentários explicativos, pois isso reduz a legibilidade do código e das explicações!
Filnor
"Depois que você não pode instalar o nvm" Então, se meu objetivo é usar o nvm, não devo fazer isso?
Jake T.
18

Este erro pode ocorrer quando o caminho da pasta de instalação do NVM possui um link simbólico .

Explicação

O caminho de instalação padrão do NVM é: $HOME/.nvmmas sua pasta pessoal pode ser um link simbólico para outra unidade, como no meu caso.

Por exemplo, minha pasta pessoal é um link simbólico para outra unidade:

/home/myuser -> /bigdrive/myuser

Isso causa o problema do prefixo.

Solução

No script de inicialização (.bashrc ou .zshrc ou outro), altere a pasta NVM para o caminho direto.

Ex: 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
fonte
Obrigado! Sua resposta deve ter mais visibilidade
ben
Não. Eu fritei meu cérebro para entender esse erro louco. Não encontrei nenhuma postagem que me ajudou. Eu tive que lutar muito para resolver o problema. Fico feliz em ajudá-lo. Vote na minha resposta para ser mais visível.
André Avelar
meu echod $ NVM_DIR foi "/Users/vijayshanker/.nvm" devo colocar "export NVM_DIR =" / Usuários / vijayshanker / .nvm (e o resto) "no bashrc, tentei, mas ainda não o corrigiu, lutando por 6 horas, por favor, ajuda nota: eu não tenho npm instalado, eu não instalei o meu nó do npm
Vijay Shanker
talvez uma solução exportar NVM_DIR = $ (readlink -f "$ HOME / .nvm") em .bashrc ou linha de comando. Isso removerá todo o link simbólico de $ HOME / .nvm e exportará um caminho completo e simples com apenas diretórios reais.
Nimlar 17/01
10

Corri para isso enquanto usava o nó instalado via nvm, com nvminstalado via homebrew. Eu o resolvi executando brew uninstall nvm, rm -rf $NVM_DIRe reinstalando o nvm usando o script de instalação oficial e reinstalando a versão do nó que eu precisava.

Nota: Eu também tinha $NVM_DIRmontado e vinculado. Mudei de volta para minha casa.

Lane Rettig
fonte
8

Pode ser o problema se você tiver o diretório inicial montado em algum lugar, porque o nvm não funciona corretamente com links simbólicos. Como não me importa onde está localizado meu $ NVM_DIR, eu corro isso e tudo funciona bem:

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

insira a descrição da imagem aquiEu tive o mesmo problema e foi realmente irritante cada vez com o terminal. Eu corro o comando para o terminal e ele foi corrigido

Para aqueles que tentam remover nvm da fermentação

pode não ser suficiente apenas preparar a desinstalação do nvm

se você vir o prefixo npm ainda / usr / local, execute este comando

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

Panayiotis Georgiou
fonte
4

Eu tenho a mesma mensagem de erro, mas outra solução. O caminho gerado automaticamente durante a curvatura (install.sh) não corresponde. Verifique isso com:

echo $NVM_DIR

No meu caso: /var/www//.nvm. Mostre no seu arquivo bash gerado automaticamente e altere-o e substitua-o: (~ / .bash_profile, ~ / .zshrc, ~ / .profile ou ~ / .bashrc)

substituir

export NVM_DIR="$HOME/.nvm"

com (por exemplo)

export NVM_DIR="$HOME.nvm"
Matthias Schobner
fonte
Vim aqui para colocar o mesmo comentário :) No meu caso, foi porque, quando criei o usuário, defini a casa como useradd --home / home / user / com o rastreio / removi do arquivo / etc / passwd e tudo começou a funcionar novamente
Israel
1

Segui a https://stackoverflow.com/a/47861348/2391795 resposta, mas não funcionou bem.

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

Depois de executar os comandos recomendados, meu nvm não funcionava mais, executando nvm useexibia a versão do nó apropriada sendo usada, mas executando node -vmostraria outra. Não era mais possível alterar a versão do nó.

Eu desinstalei e reinstalei o nvm completamente para corrigi-lo. Segui https://github.com/creationix/nvm#manual-uninstall executando

$ rm -rf "$NVM_DIR"

Em seguida, editei meu .zshrcpara remover as linhas relacionadas ao nvm, que no meu caso eram

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"

Em seguida, iniciou um novo shell (para que o nvm não seja carregado nesse novo shell) e execute https://github.com/creationix/nvm#install-script

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

O que adicionou nvm as linhas que eu já havia removido no meu .zshrc.

Então eu pude usar o nvm como costumava. Eu acho que esse é um caso estranho em que as coisas deram errado e me forçou a reinstalar tudo, não parece que a maioria das pessoas passa por isso devido a esse problema.

Vadorequest
fonte
1

Deixe-me descrever minha situação.

Primeiro, verifique a configuração atual

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

Então, encontrei o erro de configuração na saída:

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

Então, eu apaguei o C:\\Program Files\\nodejsarquivo /mnt/c/Users/paul/.npmrc.

Paul Han
fonte
1

Resolvi esse problema quando ele era exibido nos terminais VSCode e JetBrains, mas não no terminal nativo usando os seguintes comandos:

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

Isso fornecerá o caminho resolvido no final:

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

A partir daí, remover os arquivos e reiniciar o VS Code deve corrigir o problema:

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

corrija o link: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774

Mehdi Nassim KHODJA
fonte
0

Eu estava procurando uma solução para o problema do prefixo nvm e encontrei esta pergunta (antes de encontrar a solução). Aqui está o meu shell "diálogo". Espero que possa ser útil para alguém. Consegui definir o prefixo com a ajuda deste post: https://github.com/npm/npm/issues/6592

Quando tentei npm config delete prefixou nvm use --delete-prefixantes de usar npm --prefix="" set prefix "", obtive apenas: npm ERR! código não ok 0

Observe que você terá que repetir o mesmo procedimento com todas as versões de nós; o prefixo será definido como (no meu caso) / usr / local após a instalação.

    $ 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
vSurfer
fonte
0

Eu tive esse problema depois de mover minha pasta pessoal para uma nova unidade no linux. Foi corrigido removendo a pasta .nvm e reinstalando o nvm

Pablo Mescher
fonte
0

Apenas resolvi o problema. Eu liguei $HOME/.nvmpara o $DEV_ZONE/env/node/nvmdiretório. Eu estava enfrentando o mesmo problema. Substituí NVM_DIRda $HOME/.zshrcseguinte forma

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

BTW, instale o NVM usando curlou wgetcomando não usando brew. Para obter mais informações, consulte o comentário nesta edição no Github: 855 # issuecomment-146115434

Nur Rony
fonte
Que tal instalar nvmcom npm?
Dmitri Zaitsev
1
A instalação do nvm através do homebrew é oficialmente descontinuada e causa problemas devido a algumas incompatibilidades. A maneira oficial é usar curl / wget, consulte github.com/creationix/nvm#install-script, consulte github.com/creationix/nvm/issues/298#issuecomment-152255091 A instalação através do npm não é suportada pelo AFAIK, porque o nvm instala npm, portanto, se o npm também instalar o nvm, poderá levar a casos extremos. Você pode ler sobre o assunto que eu vinculei anteriormente.
Vadorequest 10/02/19
0

Eu só tenho uma ideia. Use o link simbólico para resolver o erro e você ainda pode usar seu prefixo para pacotes instalados globalmente. ln -s [your prefix path] [path in the '~/.nvm'] então você terá uma pasta simbólica na ~/.nvmpasta, mas, de fato, seus pacotes globais ainda estão instalados no [caminho do seu prefixo]. O erro não será exibido novamente e você poderá usá-lo nvm use **normalmente. ps: funcionou para mim mac. pps: não se esqueça de definir $PATHsua binpasta npm para usar os pacotes instalados globalmente.

XQi
fonte
-2

Nota:
para remover, excluir ou desinstalar o nvm - basta remover a $NVM_DIRpasta (geralmente ~/.nvm),
você pode tentar:
rm -rf ~/.nvm

kaiqiu
fonte