NPM è una versione errata dell'ultima installazione di Ubuntu (18.04)


18

L'installazione normale sarebbe quella sudo apt install nodejsdi installare Node.js e quindi sudo apt install npmdi installare Node Package Manager. Tuttavia, dopo averlo fatto, npm -vdice 3.5.2. Per aggiornare normalmente, vorrei fare sudo npm install -g npm, che aggiorna all'ultima versione (che, al momento di scrivere questo articolo, è 6.0.1).

Quando faccio un which npm, ottengo /usr/local/bin/npm, tuttavia aptinstalla un collegamento simbolico a /usr/bin/npm. Se sudo apt purge npmrimuovo npm, lascia comunque la versione npm di npm a /usr/local/bin/npm, comunque npm -vdice -bash: /usr/bin/npm: No such file or directory.

Molti articoli dicono di usare un PPA per installare nodejs, ma penso che dovrebbe esserci un modo nativo per farlo apt.

Istruzioni DigitalOcean sull'installazione normalmente e tramite PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

Istruzioni TecAdmin sull'installazione tramite PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Risposte:


31

TLDR: questo problema è causato dalla memorizzazione nella cache di Bash del percorso del npmcomando e può essere risolto da hash -d npm. Non hai nemmeno bisogno di occuparti a apt purgemeno che tu non voglia.

Spiegazione

Ecco i miei passi per ottenere una nuova npmversione su Ubuntu. Innanzitutto, eseguire l'installazione come descritto da OP:

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

Puoi vedere che la nuova versione funziona già bene in /usr/local/bin/npm, ma sfortunatamente la cache di Bash ha ancora /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)

Per risolvere il problema, cancellalo dalla cache di Bash (fallo in tutte le shell aperte):

$ hash -d npm

Ora la nuova versione funziona come desiderato:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm

1
In realtà mi piace questa risposta meglio della mia.
Blairg23

Questo ha risolto il mio problema. Grazie mille. Ottima spiegazione anche. L'unica cosa che non è chiara per me è la natura esatta del perché la pulizia della cache di bash risolve il problema. Non sarebbe meglio eliminare il npmmemorizzato su /usr/bin/npm? E perché viene prelevata la versione corretta dopo aver svuotato la cache di bash, se entrambe le versioni rimangono installate?
temporaneo

12

Il modo in cui ho trovato è quello di eliminare npm sudo apt purge npm, quindi semplicemente ricreare un collegamento simbolico all'installazione globale tramite ln -s /usr/local/bin/npm /usr/bin/npm. Dopo quella correzione, npm -vritorna 6.0.1come previsto.


2
Ha funzionato con Ubuntu 18.04 su UserLAnd su Android 6.0.1. Grazie! :)
l3l_aze,

1
OP dovresti contrassegnarlo come risposta.
Robert Munn,

Strana cosa, per me è stato abbastanza diverso. Avevo la versione aggiornata /usr/bin/npm, quindi ho usato la strada opposta usando ln -s /usr/bin/npm /usr/local/bin/npm. Strano, ma la tua risposta mi ha aiutato a scoprire come affrontare il problema della versione errata.
LordAnomander

2

Per avere il controllo sulla versione di npm installata, utilizzo sempre nvm(controllo versione nodo). Puoi installarlo attraverso le istruzioni qui: https://github.com/creationix/nvm Quindi, seguendo il comando, installa l'ultimo npm sul tuo computer:

nvm install node

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.