Question

Je ne peux pas comprendre 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 sur /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 (devrait-il avoir?).Maintenant, lorsque j'utilise Node en mode ligne de commande, je ne peux pas simplement générer un code générique pour coder mes modules installés globalement.Donc, je me demande s'il existe une sorte de fichier de configuration de nœud ou de variable d'environnement où je peux ajouter mon chemin d'installation global du module npm?

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

Était-ce utile?

La solution

OK, je l'ai.Combinaison d'informations provenant 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 vérification des modules.Pour définir cela, j'ai fait ce qui suit:

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

Ceci définit NODE_PATH sur le dossier d'installation global de npm.

Autres conseils

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, en exécutant node set-repl-paths.js, vous aurez un repl avec les chemins déjà définis.Vous pouvez écrire un simple script bash ou définir un alias de shell pour pouvoir simplement taper node-repl ou quelque chose de similaire.

Avec npm 1.x, vous devez 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, alors dans votre dossier module émettez un npm link foo.Vous pouvez maintenant générer un code codique dans votre module.

La meilleure pratique consiste à utiliser l'installation locale.

Voir npm1.0: Installation globale vs locale sur le blog nodejs.

Pour installer un package globalement (généralement utilisé par la ligne de commande)

npm install --global PACKAGE_NAME

Dans mon cas, je voulais installer jslint comme outil de ligne de commande.Alors j'ai couru

npm install --global jslint

Ceci installe le package sur

/usr/local/lib/node_modules/

Alors pourquoi tout ça?Vous ne devriez pas installer de packages globalement 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 la FAQ npm

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

Vous pouvez ajouter ceci à votre .bashrc pour ne définir NODE_PATH que lors de l'exécution du repl, car exiger des modules globaux est un anti-pattern.

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

Il définit NODE_PATH lorsque aucun argument n'est passé au nœud.Donc cela ne fonctionnerait pas avec quelque chose comme node -i.Vous devrez ajouter plus de vérification des arguments pour couvrir tous les cas où une réplique est exécutée.

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

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

Ensuite, exécutez simplement node_global.J'ai choisi la deuxième option.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top