NPM est une version incorrecte sur la dernière installation d'Ubuntu (18.04)

18

L'installation normale consiste sudo apt install nodejsà installer Node.js puis sudo apt install npmà installer Node Package Manager. Cependant, ce faisant, npm -vdit 3.5.2. Pour mettre à niveau normalement, je ferais sudo npm install -g npm, qui met à jour la dernière version (qui, au moment de la rédaction de cet article, est 6.0.1).

Quand je fais un which npm, j'obtiens /usr/local/bin/npm, mais aptinstalle un lien symbolique à /usr/bin/npm. Si je sudo apt purge npmsupprime npm, il laisse toujours la version npm de npm à /usr/local/bin/npm, npm -vdit cependant -bash: /usr/bin/npm: No such file or directory.

De nombreux articles disent d'utiliser un PPA pour installer nodejs, mais je pense qu'il devrait y avoir une façon native de le faire apt.

Instructions de DigitalOcean sur l'installation normalement et via PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

Instructions TecAdmin sur l'installation via PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Blairg23
la source

Réponses:

31

TLDR: ce problème est causé par la mise en cache par Bash du chemin de la npmcommande et peut être résolu par hash -d npm. Vous n'avez même pas besoin de faire face à apt purgemoins que vous ne le vouliez.

Explication

Voici mes étapes pour obtenir une nouvelle npmversion sur Ubuntu. Tout d'abord, effectuez l'installation comme OP le décrit:

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

Vous pouvez voir que la nouvelle version fonctionne déjà bien /usr/local/bin/npm, mais malheureusement, le cache Bash a toujours /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)

Pour résoudre le problème, supprimez-le du cache Bash (faites-le dans tous les shells ouverts):

$ hash -d npm

Maintenant, la nouvelle version fonctionne comme vous le souhaitez:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm
krubo
la source
1
En fait, j'aime mieux cette réponse que la mienne.
Blairg23
Cela a résolu mon problème. Merci beaucoup. Excellente explication aussi. La seule chose qui n'est pas claire pour moi est la nature exacte de la raison pour laquelle l'effacement du cache bash résout le problème. Ne serait-il pas préférable de supprimer le npmstocké sur /usr/bin/npm? Et pourquoi la bonne version est-elle choisie après avoir effacé le cache bash, si les deux versions restent installées?
temporaire_user_name
12

La façon dont j'ai trouvé est de purger npm sudo apt purge npm, puis de recréer simplement un lien symbolique vers l'installation globale via ln -s /usr/local/bin/npm /usr/bin/npm. Après ce correctif, npm -vrenvoie 6.0.1comme prévu.

Blairg23
la source
2
Fonctionné avec Ubuntu 18.04 fonctionnant via UserLAnd sur Android 6.0.1. Je vous remercie! :)
l3l_aze
1
OP, vous devez marquer cela comme la réponse.
Robert Munn
Chose bizarre, pour moi, c'était assez différent. J'avais la version mise à jour /usr/bin/npm, donc je suis allé dans l'autre sens en utilisant ln -s /usr/bin/npm /usr/local/bin/npm. Étrange, mais votre réponse m'a aidé à trouver comment résoudre le problème de version incorrecte.
LordAnomander
2

Pour avoir le contrôle sur la version npm installée, j'utilise toujours nvm(contrôle de version du nœud). Vous pouvez l'installer via les instructions ici: https://github.com/creationix/nvm Ensuite, en suivant la commande, installez le dernier npm sur votre ordinateur:

nvm install node

Farzad
la source