NPM ist bei der neuesten Ubuntu (18.04) -Installation eine falsche Version

16

Bei der normalen Installation wird zuerst sudo apt install nodejsNode.js und dann sudo apt install npmNode Package Manager installiert. Allerdings npm -vsagt dabei 3.5.2. Um ein normales Upgrade durchzuführen, würde ich tun sudo npm install -g npm, welches Update auf die neueste Version (die zum Zeitpunkt des Schreibens dieses Artikels ist 6.0.1).

Wenn ich a mache which npm, bekomme ich /usr/local/bin/npmallerdings apteinen Symlink an /usr/bin/npm. Wenn ich sudo apt purge npmnpm zu entfernen, lässt er noch die npm Version von npm an /usr/local/bin/npm, aber npm -vsagt -bash: /usr/bin/npm: No such file or directory.

In vielen Artikeln wird die Verwendung eines PPA zur Installation von nodejs empfohlen, aber ich denke, es sollte eine native Möglichkeit geben, dies zu tun apt.

Anweisungen zur normalen und PPA-Installation von DigitalOcean: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

TecAdmin-Anweisungen zur Installation über PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Blairg23
quelle

Antworten:

29

TLDR: Dieses Problem wird durch Bash-Caching des npmBefehlspfads verursacht und kann durch behoben werden hash -d npm. Sie müssen sich nicht einmal darum kümmern, es apt purgesei denn, Sie möchten.

Erläuterung

Hier sind meine Schritte, um eine neue npmVersion für Ubuntu zu bekommen. Führen Sie zunächst die Installation wie folgt durch:

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

Sie können sehen, dass die neue Version bereits in Ordnung ist /usr/local/bin/npm, aber leider hat der Bash-Cache noch /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)

Um das Problem zu beheben, löschen Sie es aus dem Bash-Cache (in allen offenen Shells):

$ hash -d npm

Jetzt funktioniert die neue Version wie gewünscht:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm
Krubo
quelle
1
Diese Antwort gefällt mir eigentlich besser als meine eigene.
Blairg23
Das hat mein Problem gelöst. Ich danke dir sehr. Tolle Erklärung auch. Die eine Sache, die mir unklar ist, ist die genaue Art, warum das Leeren des Bash-Cache das Problem behebt. Wäre es nicht besser, das npmgespeicherte zu löschen /usr/bin/npm? Und warum wird nach dem Leeren des Bash-Cache die richtige Version gefunden, wenn beide Versionen installiert bleiben?
temporary_user_name
12

Die Methode, die ich gefunden habe, besteht darin, npm zu löschen sudo apt purge npmund dann einfach einen Symlink zur globalen Installation über neu zu erstellen ln -s /usr/local/bin/npm /usr/bin/npm. Nach diesem Update, npm -vkehrt 6.0.1wie erwartet.

Blairg23
quelle
2
Arbeitete mit Ubuntu 18.04 unter UserLAnd auf Android 6.0.1. Vielen Dank! :)
l3l_aze
1
OP Sie sollten dies als Antwort markieren.
Robert Munn
Seltsame Sache, für mich war es ganz anders. Ich hatte die aktualisierte Version in /usr/bin/npm, so ging ich den entgegengesetzten Weg mit ln -s /usr/bin/npm /usr/local/bin/npm. Seltsam, aber Ihre Antwort hat mir geholfen, herauszufinden, wie ich mit dem Problem der falschen Version umgehen kann.
LordAnomander
2

Um die Kontrolle über die installierte npm-Version zu haben, benutze ich immer nvm(Node-Versionskontrolle). Sie können es mithilfe der folgenden Anweisungen installieren : https://github.com/creationix/nvm Installieren Sie dann mit dem folgenden Befehl die neueste npm auf Ihrem Computer:

nvm install node

Farzad
quelle