NPM es una versión incorrecta en la última instalación de Ubuntu (18.04)

18

La instalación normal sería sudo apt install nodejsinstalar Node.js y luego sudo apt install npminstalar Node Package Manager. Sin embargo, al hacerlo, npm -vdice 3.5.2. Para actualizar normalmente, lo haría sudo npm install -g npm, que se actualiza a la última versión (que, al momento de escribir este artículo, es 6.0.1).

Cuando hago un which npm, obtengo /usr/local/bin/npm, sin embargo, aptinstala un enlace simbólico en /usr/bin/npm. Si sudo apt purge npmelimino npm, todavía deja la versión npm de npm en /usr/local/bin/npm, sin embargo, npm -vdice -bash: /usr/bin/npm: No such file or directory.

Muchos artículos dicen usar un PPA para instalar nodejs, pero creo que debería haber una forma nativa de hacerlo apt.

Instrucciones de DigitalOcean sobre la instalación normal y a través de PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

Instrucciones de TecAdmin sobre la instalación a través de PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Blairg23
fuente

Respuestas:

31

TLDR: este problema se debe a que Bash almacena en caché la ruta del npmcomando y puede resolverse mediante hash -d npm. Ni siquiera necesita tratar a apt purgemenos que lo desee.

Explicación

Estos fueron mis pasos para obtener una nueva npmversión en Ubuntu. Primero, realice la instalación como OP describe:

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

Puede ver que la nueva versión ya está funcionando bien /usr/local/bin/npm, pero desafortunadamente el caché Bash todavía tiene /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 solucionar el problema, límpielo del caché Bash (haga esto en todos los shells abiertos):

$ hash -d npm

Ahora la nueva versión funciona como se desea:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm
krubo
fuente
1
De hecho, me gusta esta respuesta mejor que la mía.
Blairg23
Esto resolvió mi problema. Muchas gracias. Gran explicación, también. Lo único que no está claro para mí es la naturaleza exacta de por qué limpiar el caché de bash soluciona el problema. ¿No sería mejor eliminar el npmalmacenado en /usr/bin/npm? ¿Y por qué se elige la versión correcta después de borrar el caché bash, si ambas versiones permanecen instaladas?
temporary_user_name
12

La forma en que encontré es purgar npm sudo apt purge npm, luego simplemente recrear un enlace simbólico a la instalación global a través de ln -s /usr/local/bin/npm /usr/bin/npm. Después de esa solución, npm -vvuelve 6.0.1como se esperaba.

Blairg23
fuente
2
Trabajó con Ubuntu 18.04 ejecutándose a través de UserLAnd en Android 6.0.1. ¡Gracias! :)
l3l_aze
1
OP debe marcar esto como la respuesta.
Robert Munn
Cosa rara, para mí fue bastante diferente. Tenía la versión actualizada /usr/bin/npm, así que tomé la ruta opuesta usando ln -s /usr/bin/npm /usr/local/bin/npm. Es extraño, pero su respuesta me ayudó a descubrir cómo lidiar con el problema de la versión incorrecta.
LordAnomander
2

Para tener control sobre la versión npm instalada, siempre uso nvm(control de versión de nodo). Puede instalarlo a través de las instrucciones aquí: https://github.com/creationix/nvm Luego, siguiendo el comando, instale el último npm en su computadora:

nvm install node

Farzad
fuente