O NPM está com a versão incorreta na última instalação do Ubuntu (18.04)

16

A instalação normal seria sudo apt install nodejsinstalar o Node.js e, em seguida, sudo apt install npminstalar o Node Package Manager. No entanto, ao fazê-lo, npm -vdiz 3.5.2. Para atualizar normalmente, eu faria o sudo npm install -g npmque é atualizado para a versão mais recente (que, no momento da redação deste artigo, é 6.0.1).

Quando eu faço um which npm, recebo /usr/local/bin/npm, no entanto, aptinstala um link simbólico em /usr/bin/npm. Se eu sudo apt purge npmremover o npm, ele ainda deixará a versão do npm em /usr/local/bin/npm, no entanto, npm -vdiz -bash: /usr/bin/npm: No such file or directory.

Muitos artigos dizem usar um PPA para instalar o nodejs, mas acho que deve haver uma maneira nativa de fazer isso apt.

Instruções do DigitalOcean sobre instalação normalmente e por meio do PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

Instruções do TecAdmin sobre instalação através do PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Blairg23
fonte

Respostas:

29

TLDR: Esse problema é causado pelo armazenamento em cache do Bash no caminho do npmcomando e pode ser resolvido por hash -d npm. Você nem precisa lidar, a apt purgemenos que queira.

Explicação

Aqui estão os meus passos para obter uma nova npmversão no Ubuntu. Primeiro, faça a instalação como o OP descreve:

$ sudo apt-get install npm
(...apt installation of npm was successful...)
$ npm -v
3.5.2
$ command -v npm
/usr/bin/npm
$ sudo npm install -g npm
(...npm installation of npm was successful...so far, so good)

Você pode ver que a nova versão já está funcionando bem /usr/local/bin/npm, mas infelizmente o cache do Bash ainda possui /usr/bin/npm:

$ /usr/local/bin/npm -v
6.4.1
$ npm -v
3.5.2
$ command -v npm
/usr/bin/npm
$ type npm
npm is hashed (/usr/bin/npm)

Para corrigir o problema, limpe-o do cache do Bash (faça isso em todos os shells abertos):

$ hash -d npm

Agora a nova versão funciona como desejado:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm
krubo
fonte
1
Na verdade, eu gosto mais dessa resposta do que a minha.
Blairg23
Isso resolveu meu problema. Muito obrigado. Ótima explicação também. A única coisa que não está clara para mim é a natureza exata do motivo pelo qual a limpeza do cache bash corrige o problema. Não seria melhor excluir os npmarmazenados em /usr/bin/npm? E por que a versão correta foi escolhida após a limpeza do cache do bash, se ambas as versões permanecem instaladas?
temporary_user_name
12

A maneira que eu encontrei é limpar o npm e sudo apt purge npm, em seguida, simplesmente recriar um link simbólico para a instalação global via ln -s /usr/local/bin/npm /usr/bin/npm. Após essa correção, npm -vretorna 6.0.1como esperado.

Blairg23
fonte
2
Trabalhou com o Ubuntu 18.04 executando o UserLAnd no Android 6.0.1. Obrigado! :)
l3l_aze 26/08/18
1
OP, você deve marcar isso como a resposta.
Robert Munn
Estranho, para mim foi bem diferente. Eu tinha a versão atualizada /usr/bin/npm, então segui a rota oposta usando ln -s /usr/bin/npm /usr/local/bin/npm. Estranho, mas sua resposta me ajudou a descobrir como lidar com o problema de versão incorreta.
LordAnomander 13/05/19
2

Para ter controle na versão npm instalada, eu sempre uso nvm(controle de versão do nó). Você pode instalá-lo através das instruções aqui: https://github.com/creationix/nvm Em seguida, seguindo o comando, instale o npm mais recente no seu computador:

nvm install node

Farzad
fonte