20 votes

définir les chemins des modules REPL de node.js

Je n'arrive pas à trouver comment ajouter des chemins à mon installation Node.js (v.0.4.7 sur Mac OS X). J'ai installé npm, et il s'installe globalement à /usr/local/lib/node_modules . Cependant, lorsque j'ai installé npm, il n'a pas informé Node de l'endroit où il avait choisi de placer les modules globaux (aurait-il dû ?). Maintenant, lorsque j'utilise Node en mode ligne de commande, je ne peux pas simplement require() mes modules installés dans le monde entier. Je me demande donc s'il existe une sorte de fichier de configuration Node ou une variable d'environnement où je peux ajouter le chemin d'installation global de mon module npm ?

Je sais que je peux simplement l'ajouter au require.paths lorsque je suis dans la ligne de commande de Node, mais je veux ajouter ce répertoire global de modules une fois pour toutes, de sorte que Node recherche toujours les modules dans ce répertoire lorsque j'utilise la fonction require() à partir de la ligne de commande. Merci d'avance pour toute aide et tout conseil pour faire coexister npm et Node !

18voto

ampersand Points 2917

OK, je l'ai. En combinant les informations de http://nodejs.org/docs/v0.4.7/api/modules.html#file_Modules et https://github.com/isaacs/npm/blob/master/doc/faq.md#readme il est clair que Node vérifie la variable d'environnement NODE_PATH lors de la recherche de modules. Pour régler cela, j'ai fait ce qui suit :

echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bashrc

Cela définit NODE_PATH comme le dossier d'installation global de npm.

4voto

rjack Points 3300

Merde, j'ai mal compris. Désolé pour ça.

De retour dans le sujet, vous pouvez mettre ces deux lignes dans set-repl-paths.js

require.paths.unshift('/usr/lib/node_modules');
require("repl").start();

Ensuite, l'exécution node set-repl-paths.js vous aurez un repl avec les chemins déjà tracés. Vous pouvez écrire un simple bash script ou définir un alias shell pour que vous puissiez juste taper node-repl ou quelque chose de similaire.

Avec npm 1.x, vous devriez utiliser l'installation locale, et laisser l'installation globale pour les modules qui fournissent des utilitaires de ligne de commande.

Si vous voulez vraiment une installation globale pour le module foo puis, dans le dossier de votre module, créez un npm link foo . Vous pouvez maintenant require("foo") dans votre module.

La meilleure pratique consiste à utiliser l'installation locale.

Véase npm 1.0 : Installation globale ou locale sur le blog de nodejs.

2voto

WonderSloth Points 21

Pour installer un paquet de manière globale (généralement utilisé par la ligne de commande)

npm install --global PACKAGE_NAME

Dans mon cas, je voulais installer jslint en tant qu'outil de ligne de commande. J'ai donc exécuté

npm install --global jslint

Ceci installe le paquet dans

/usr/local/lib/node_modules/

Alors pourquoi tout ça ? Vous ne devriez pas installer des paquets de manière globale s'ils sont utilisés spécifiquement dans un projet.

Pour plus d'informations, consultez les pages d'aide.

npm help install

npm help global

Je l'ai également trouvé dans le npm FAQ

1voto

dosentmatter Points 138

En réponse à cela : https://stackoverflow.com/a/5923898/7381355

Vous pouvez ajouter ceci à votre .bashrc afin de ne définir le NODE_PATH que lors de l'exécution du repl, car le fait de demander des modules globaux est un anti-modèle.

node() {
  if (( $# == 0 )); then
    NODE_PATH=$(npm root -g) command node
  else
    command node "$@"
  fi
}

Il définit NODE_PATH quand aucun argument n'est passé au noeud. Cela ne fonctionnerait donc pas avec quelque chose comme node -i . Il faudrait ajouter la vérification des arguments pour couvrir tous les cas où un repl est exécuté.

Ainsi, le repl définirait toujours NODE_PATH. Si vous voulez pouvoir choisir d'exécuter le repl ou un script avec des modules globaux ou non, vous pouvez ajouter ceci à votre .bashrc à la place.

node_global() {
  NODE_PATH=$(npm root -g) node "$@"
}

Ensuite, il suffit d'exécuter node_global. J'ai choisi la deuxième option.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X