J'essayais de mettre à niveau phonegap
via npm
lorsque j'ai commencé à avoir des problèmes. Bref, il y a deux répertoires node_modules
sur mon ordinateur.
/usr/local/lib/node_modules
/usr/local/share/npm/lib/node_modules
Lorsque j'exécute npm upgrade -g phonegap
, il apparaît que npm
met à jour la copie du package qui réside dans /usr/local/lib/node_modules
. Cependant, si je which phonegap
je constate que le lien symbolique pointe vers l'ancienne installation à /usr/local/share/npm/lib/node_modules
.
De plus, lorsque j'essaie d'installer un paquet autonome tel que express
, les fichiers sont installés dans le répertoire /usr/local/lib/node_modules
, mais aucun lien symbolique vers l'exécutable n'est créé nulle part dans mon $PATH
.
Deux questions:
npm
pour lier les exécutables dans mon $PATH
lorsqu’il installe un logiciel?Points bonus: La méthode d'installation de node
affecte-t-elle la configuration? Il y a un beaucoup d'options .
EDIT: J'ai découvert que des liens symboliques étaient créés dans mon /usr/local/bin
, mais mon .bash_profile
était configuré avec /usr/local/share/npm/bin
devant /usr/local/bin
dans mon $PATH
. Je me souviens vaguement avoir ajouté ce chemin à mon profil à un moment donné, mais je ne sais pas pourquoi.
La question est donc de savoir comment je me suis retrouvé avec deux répertoires node_modules
différents sur mon ordinateur et pourquoi voudrais-je que mon node_modules
se trouve dans le sous-répertoire share/npm/lib
au lieu d'être situé à droite dans /usr/local/lib
?
/usr/local/lib/node_modules
est le répertoire correct pour les modules de nœud installés globalement.
/usr/local/share/npm/lib/node_modules
n'a aucun sens pour moi. Un problème ici est que vous êtes confus car il existe deux répertoires appelés node_modules :
/usr/local/lib/node_modules
/usr/local/lib/node_modules/npm/node_modules
Ce dernier semble être un module de noeud fourni avec Node, par exemple, lodash
, lorsque ce dernier est un module de noeud que j'ai installé avec npm
.
Deuxième Thomas David Kehoe , avec l'avertissement suivant -
Si vous utilisez le gestionnaire de version de noeud (nvm), vos modules de noeud globaux seront stockés sous la version de noeud que vous utilisez au moment où vous avez enregistré le module.
Alors ~/.nvm/versions/node/{version}/lib/node_modules/
.
npm root -g
pour vérifier l'emplacement global de npm_modules
Si vous souhaitez connaître l'emplacement de vos packages NPM, vous devez:
which npm // locate a program file in the user's path SEE man which
// OUTPUT SAMPLE
/usr/local/bin/npm
la /usr/local/bin/npm // la: aliased to ls -lAh SEE which la THEN man ls
lrwxr-xr-x 1 t04435 admin 46B 18 Sep 10:37 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
Donc, étant donné que npm est un package NODE lui-même, il est installé au même emplacement que les autres packages (EUREKA). Donc, pour confirmer vous devriez aller dans node_modules et lister le répertoire.
cd /usr/local/lib/node_modules/
ls
#SAMPLE OUTPUT
@angular npm .... all global npm packages installed
npm -root -g
Selon le commentaire de @anthonygore