Suivre

# which npm
/usr/local/bin/npm

# ls -la /usr/local/bin/npm
lrwxrwxrwx 1 root root 38 juil. 7 11:58 /usr/local/bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js

# /usr/local/bin/npm -v
6.10.0

# npm -v
5.8.0

j'adore ...

le problème a disparu !

incompréhensible maintenant ça retourne 6.10.0 dans les deux cas et je ne pense pas avoir changé quoi que ce soit... 🤔

Argh si je fait un strace dessus le problème disparait.

$ strace npm -v 2>/dev/null
6.10.0
$ npm -v 2>/dev/null
5.8.0

/usr/local/bin/npm
(...)
npm@6.10.0 /usr/local/lib/node_modules/npm

npm
(...)
npm@5.8.0 /usr/share/npm

mais pourquoi il va chercher celui de /usr/share/npm ? un truc propre à son mécanisme de résolution des chemins des modules...

Finalement pour ceux qui veulent savoir pourquoi le which ne renvoit pas ce que npm appele en réalité, c'est parce que bash a un cache !

$ which npm
/usr/local/bin/npm
$ type npm
npm est haché (/usr/bin/npm)

25 années d'unix pour découvrirc ela maintenant...

ou redécouvrir si j'avais oublié )

pour faire un reset et correspondre à nouveau avec le which ...

hash npm

@Fritange

je crois que cela nme dépasse, si le fonctionnement en strace n'est pas le même que sans... nodejs s'amuse avec les librairies dynamiques ? possible....

@PhilippeLhardy
Tu as peut-être installé nvm qui sert à avoir plusieurs versions de nom (je ne connais pas le fonctionnement exact)...
Sinon peut-être un alias ?
@Fritange

@MrMagne @Fritange

j'ai vérifié les alias

c'est le paquet debian qui installe dans /usr/share/npm le 5.8.0 et c'est ausii lui qui à l'installation doit créer le module à jour 6.10.0 dans /usr/local/...
C'est un problème debian.

C'est un peu compliqué parce que npm est un script nodejs et j'ai l'impression que nodejs lui même reconstruit le chemin pour le trouver dans modules, enfin c'est un mix debian + nodejs sympathique.

Quand au strace là aussi c'est curieux.

@PhilippeLhardy
J'avais lu tes messages dans le désordre, désolé. Personnellement soit j'utilise le npm de ma distribution et je n'y touche pas, soit j'installe et j'update manuellement. Le mélange des deux est bancale.
Et c'est pareil pour tout les gestionnaires de paquets d'autres languages (pip, Ruby etc..)
@Fritange

@MrMagne @Fritange

Le mix apt install + npm -install je l'ai fait au début,
mais depuis j'ai tout purgé et réinstallé, et il semble que le apt install npm fait la mise à jour tout seul ...

Y a t'il un cache global de npm qui ne serait pas purgé ?

@PhilippeLhardy
De mémoire le --global n'est pas pour le système, mais global pour l'utilisateur (à opposer au répertoire courant). Donc tu dois avoir quelque chose dans ton $HOME (.cache/npm peut-être ? je ne sais plus)
@Fritange

@MrMagne @Fritange

merci à vous, j'avais un mix d'une version installée en local et d'une version debian, je fais un nettoyage propre de la version locale.

@MrMagne @Fritange

la suite donc, le -g est global, en tout cas pour le npm fourni avec la debian, et donc c'est très moche...

npm install -g @angular/cli
(...)
npm WARN checkPermissions Missing write access to /usr/local/lib
npm ERR! path /usr/local/lib
(...)

@MrMagne @PhilippeLhardy

Pour python, perso c'est pyenv+virtualenv, mais généralement, oui, il vaut mieux éviter, à part à utiliser des softs comme environment modules. Je crois que npm c'est le pire des packages managers à gérer niveau système, avec les gems de ruby peut-être.

@Fritange

Je pense qu'effectivement il peut y avoir quelquechose en rapport avec le cache de npm...

npm cache verify
Cache verified and compressed (~/.npm/_cacache):
Content verified: 261 (4482801 bytes)
Index entries: 493
Finished in 1.003s

Inscrivez-vous pour prendre part à la conversation
Framapiaf

Framapiaf est un service de microblog similaire à Twitter. Il est libre, décentralisé et fédéré. Il permet de courts messages (max. 500 caractères), de définir leur degré de confidentialité et de suivre les membres du réseau sans publicité ni pistage.