A nvm continua "esquecendo" o nó na nova sessão do terminal


546

Ao usar uma nova sessão de terminal no OS X, nvmesquece a versão do nó e o padrão é nada:

$ nvm ls:

         .nvm
     v0.11.12
     v0.11.13

Eu tenho que continuar batendo nvm use v.0.11.13em todas as sessões:

         .nvm
     v0.11.12
->   v0.11.13

Eu tentei tanto a brewinstalação quanto o script de instalação oficial.

Meu .profilepara a versão brew:

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

E para o script install.sh:

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.10.0/install.sh | bash

#nvm
export NVM_DIR="/Users/farhad/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

Alguma pista do que estou fazendo de errado?


1
Apenas quer adicionar este aqui - Certifique-se de exportar a partir .bash_profilee não o seu.bashrc
James111

Respostas:


1181

Tente nvm alias default. Por exemplo:

$ nvm alias default 0.12.7

Isso define a versão do nó padrão no seu shell. Em seguida, verifique se a alteração persiste fechando a janela do shell, abrindo uma nova e, em seguida: node --version


11
Esse já não é o trabalho da nvm? Depois $ nvm alias default 0.11.13e $ nvm use 0.11.12eu entendo node --version = 0.11.12. Ainda assim, em uma nova sessão, o nó desapareceu novamente. No debian, eu não tenho esse problema.
14004 frhd

4
Ok, Ive teve um erro de digitação: nvm alias defaul X. Com o uso correto, ele realmente funciona. Então o fluxo de trabalho seria nvm install Xentão nvm alias default X, eu acho. Obrigado por ajudar!
Frhd 5/07

21
Eu tive o mesmo problema e foi porque eu estava exportando o NVM_DIRdepois nvm.sh. Certifique-se de exportar o NVM_DIRantes.
maxwell2022

11
Observe que nvm alias defaultnão define a versão do nó para o ambiente atual, apenas para todos os novos.
ericsoco 9/09/15

28
Se isso não funcionar, certifique-se de que você .bash_profile(ou .bashrcqualquer outra coisa) não modifique nada PATHdepoissource xx/nvm.sh
boa qualidade

85

Alias ​​para nodesi próprio para evitar a atualização do alias padrão junto com as atualizações de versão do nó posteriormente.

nvm alias default node

2
! AVISO: A versão 'node' não existe. padrão -> nó (-> N / A)?
House3272

6
Que tal node alias default stable?
Pierre Henry

1
Eu acho que você não quer stablemais usar . Nos documentos da nvm: "stable: esse alias foi descontinuado e se aplica apenas ao nó v0.12 e anterior. Atualmente, esse é um alias para o nó".
22416 pherris

1
Para qual nodeé o padrão? O Node instalado e usado pelo NVM no shell atual ou o Node possivelmente instalado no sistema pelo pacote de instalação do Node ou pelo Homebrew etc?
2540625

7
(mantenedor da nvm aqui) node(e stable, mas tudo o que foi lançado no semver é estável, agora é uma palavra inútil) usa a versão mais recente disponível. Para comandos locais, o mais recente instalado; para comandos remotos, mais recente disponível.
LJHarb

40

Para instalar a versão estável mais recente:

nvm install stable

Para definir o padrão para a versão estável (em vez de uma versão específica):

nvm alias default stable

Para listar versões instaladas:

nvm list

A partir de v6.2.0, será algo como:

$ nvm list
         v4.4.2
->       v6.2.0
default -> stable (-> v6.2.0)
node -> stable (-> v6.2.0) (default)
stable -> 6.2 (-> v6.2.0) (default)
iojs -> N/A (default)

Isso funcionou muito bem e a sugestão de uso nvm listajuda os usuários a visualizar o que está acontecendo com seus versionamentos. Obrigado!
Solvitieg

30

No meu caso, outro programa adicionou PATHalterações ao.bashrc

Se o outro programa alterasse a inicialização do nvm PATH após , as PATHalterações do nvm seriam esquecidas e obteríamos o nó do sistema em nosso PATH(ou nenhum nó).

A solução foi mover a configuração da nvm para a parte inferior do.bashrc

### BAD .bashrc ###

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

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

Solução:

### GOOD .bashrc ###

# Some other program adding to the PATH:
export PATH="$ANT_ROOT:$PATH"

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

(Isso ocorreu com o bash 4.2.46 no CentOS. Parece-me um bug no bash, mas posso estar enganado.)


1
Isso me ajudou! O padrão foi bloqueado.
Redsandro 6/09/19

1
Dê a esse cara uma medalha! Eu tive carregamento adicional de outros arquivos * rc no meu zshrc depois que a exportação NVM_DIR me deixou louco. Obrigado!
bobbytables 20/09/18

Obrigado! Isso estava me deixando maluco.
Trees

27

O nvm faz seu trabalho alterando a variável PATH, portanto, você precisa ter certeza de que não está alterando seu PATH para outra coisa depois de obter o script nvm.sh.

No meu caso, nvm.sh estava sendo chamado em .bashrc, mas a variável PATH estava sendo atualizada em .bash_profile, o que fez com que minha sessão localizasse o nó do sistema antes do nó nvm.


1
como posso inspecionar isso? Suspeito que seja esse o caso.
Fuzz suave

este foi o meu caso, obrigado! i estava se pondo a exportação em cima no meu arquivo .zshrc, basta movê-lo para o fundo e o problema foi resolvido
Alejandro Silva

Esse foi o meu caso. A solução foi mover a entrada NVM ~ / .bash_profile para o final do arquivo + conjunto nvm alias defaulte nvm usepara a versão que eu precisava.
Eugene Tartakovsky

Esta foi a solução para mim. Moveu o seguinte para a parte inferior de .bashrc: export NVM_DIR="$HOME/.nvm"then. "/usr/local/opt/nvm/nvm.sh"
asmiller

10

As soluções mais bem avaliadas não pareciam funcionar para mim. Minha solução está abaixo:

  1. Desinstale o nvm completamente usando o homebrew:brew uninstall nvm
  2. Reinstalar brew install nvm
  3. No Terminal, siga as etapas abaixo (elas também são listadas ao instalar o nvm via homebrew):

    mkdir ~ / .nvm cp $ (brew --prefix nvm) / nvm-exec ~ / .nvm / export NVM_DIR = ~ / .nvm fonte $ (brew --prefix nvm) /nvm.sh

As etapas descritas acima adicionam o diretório de trabalho do NVM ao seu caminho $ HOME, copiam o nvm-exec para o diretório de trabalho do NVM e adicionam a $ HOME / .bashrc, $ HOME / .zshrc ou o arquivo de configuração equivalente do seu shell. listados em uma instalação NVM usando homebrew)


7

Se você já tentou de tudo sem sorte, pode tentar o seguinte: _

1 -> desinstalar o NVM

rm -rf ~/.nvm

2 -> Remova as dependências npm seguindo este

3 -> Instalar NVM

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

4 -> Definir ~/.bash_profileconfiguração

Corre sudo nano ~/.bash_profile

Copie e cole seguindo este

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"  # This loads nvm bash_completion

5 -> CONTROL + Xsalve as alterações

6 -> Executar . ~/.bash_profile

7 -> Agora você deve ter nvminstalado em sua máquina; para instalar o nó, execute a nvm install v7.8.0versão padrão do nó ou você pode instalar qualquer versão do nó


1
Muito obrigado! Esta foi a única solução que define o caminho do nó no bash também e funcionou para mim. Eu apenas usei "nvm instalar nó" para instalar mais recente versão de nó em vez de usar "nvm instalar v7.8.0"
user3492435

5

Esta pergunta foi mencionada para o OSX, mas aconteceu comigo no meu sistema operacional Linux. Tentei usar, nvm alias default <version>mas para cada nova sessão de terminal a versão do nó usado foi esquecida. Então, aqui está a solução que eu descobri.

certifique-se de definir um alias padrão para a versão do nó , insira o seguinte código em .bashrc e source .bashrc.

export NVM_DIR="/home/bonnie/.nvm"
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
    ## Source it
    source "$NVM_DIR/nvm.sh"
fi
NODE_DEFAULT_VERSION=$(<"$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$NODE_DEFAULT_VERSION/bin":$PATH

link da solução descritiva


1
Apenas uma observação, isso depende da inclusão de vna versão ao configurar o controle remoto. Por exemplo, em v4.2.4vez de 4.2.4.
Vaughan

4

Fazendo nvm install 10.14, por exemplo, será nvm useque a versão para a sessão shell atual, mas vai não sempre defini-lo como padrão para futuras sessões como seria de esperar. A versão do nó que você obtém em uma nova sessão de shell é determinada por nvm alias default. De maneira confusa, nvm installapenas definirá o alias padrão se ainda não estiver definido. Para obter o comportamento esperado, faça o seguinte:

nvm alias default ''; nvm install 10.14

Isso garantirá que a versão seja baixada, use-a para a sessão atual e defina-a como padrão para sessões futuras.


3

execute isso depois de instalar qualquer versão,

n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

Este comando está copiando qualquer versão do nó que você tenha ativado via nvm no diretório / usr / local / e configurando as permissões para que todos os usuários possam acessá-las.


Eu recomendaria usar &&s em vez de ;s nesse comando. Se whichnão encontrar o nó, não queremos continuar com o chmod /bin/*!
Joeytwiddle 26/02


2

Estou usando o ZSH, então tive que modificar ~/.zshrccom as linhas relativas ao NVM nessa ordem:

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
source ~/.nvm/nvm.sh

1
$ nvm alias default {NODE_VERSION}

quando usamos o comando acima, atualize apenas a versão do nó, mas ele npmainda usa a versão antiga.

Aqui está outra solução para atualizar os dois nodee npm, no meu caso, quero usar o nó 8.9.4e usei o comando abaixo.

$ nvm use default 8.9.4

E o comando retorna a saída.

Agora usando o nó v8.9.4 (npm v5.6.0)


0

Se você também tem SDKMAN ...

De alguma forma, o SDKMAN estava em conflito com o meu NVM. Se você está maluco com isso e ainda não consegue descobrir, eu apenas o consertei ignorando o "ISSO DEVE ESTAR NO FINAL DO ARQUIVO ..." do SDKMAN e colocando as linhas NVM atrás dele.

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/myname/.sdkman"
[[ -s "/Users/myname/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/myname/.sdkman/bin/sdkman-init.sh"

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"  # This loads nvm bash_completion

0

Eu estava enfrentando o mesmo problema enquanto usava o terminal integrado no editor de código VS. Reiniciar o VS Code após alterar a versão do nó usando o nvm corrigiu o problema para mim.


0

Aqui está uma instrução simples:

1) Instale:

nvm install 8.10.0

2) Use uma vez por terminal

nvm use 8.10.0

3) Configure como padrão para todos os terminais

nvm alias default 8.10.0

Pode ser necessário usar permissões de root para executar essas ações.

E não se esqueça de verificar a documentação da nvm para obter mais informações.

Observe também que pode ser necessário especificar a versão do nó para o seu IDE: insira a descrição da imagem aqui


-2

Também no caso de você ter um instalado antes do nvm, verifique no seu ~ / .bash_profile para não ter algo como:

export PATH=/bin:/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH

Se você o possui, comente / remova-o e o nvm deve começar a manipular a versão do nó padrão.


Definir uma variável de caminho não tem nada a ver com a seleção de versão do nvm, certamente?
91117 sn0r

O nvm.sh deve modificar seu PATH depois que você o definir (por exemplo, com o acima). Isso permite que a nvm coloque seu diretório de versão antes de / usr / local / bin, onde fica a versão "sistema" do nó.
Denis Howe

-3

Depois de muito tempo em conflito com esse problema, descobri como corrigi-lo. Aqui está uma solução passo a passo para o problema:

  • Abra o terminal e instale as ferramentas do desenvolvedor da linha de comandos:

    xcode-select --install

  • Pressione Enter

  • Instale a versão mais recente do NVM:

    cd ~/

  • Pressione Enter

    git clone https://github.com/creationix/nvm.git .nvm

  • Pressione Enter
  • Caso você já tenha criado a pasta .nvm antes, você verá a próxima mensagem de erro:

    fatal: destination path '.nvm' already exists and is not an empty directory.

    Caso contrário, você verá o processo de clonagem em execução até que seja concluído.

  • Confira a versão mais recente do NVM:

    cd ~/.nvm

  • Pressione Enter

    git checkout v0.34.0

    Você receberá uma resposta semelhante a:

    HEAD is now at 3d9c31d v0.34.0

    A versão pode ser diferente em sistemas diferentes.

    ls

  • Pressione Enter

    . nvm.sh

  • Pressione Enter

    nvm list

  • Pressione Enter

    Você verá as diferentes versões de nós instaladas na sua máquina; pode haver alguns erros, não dê atenção a eles.

    nvm ls-remote | tail -n9

  • Pressione Enter

    nvm list

  • Abra o bash usando o vim:

    vim ~/.bash_profile

  • Dentro do editor vim, pressione: ipara inserir INSERT modee iniciar uma nova linha. Se houver algum erro ao editar, pressione a ESCtecla e, em seguida, :q!para sair sem salvar.

    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" # This loads nvm bash_completion

  • Pressione a ESCtecla quando terminar de editar o arquivo (você verá o modo INSERIR desaparecendo).

  • Pressione :wqpara salvar o arquivo.
  • Pressione Enter

    nvm ls-remote | tail -n9

  • Pressione enter e instale a versão mais recente do nvm apresentada:

    nvm install 12.6.0

  • Quando o processo terminar, você verá: Now using node v12.6.0 (npm v6.9.0)

  • Você pode verificar se a instalação foi bem-sucedida pressionando:

    node -vou npm -v, deve mostrar as versões do nvm e do npm instaladas no seu sistema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.