182 votes

Comment importer des modules globaux dans Node ? J'obtiens "Error : Cannot find module <module>" ?

J'essaie d'installer Node sur Mac OSX Lion. Tout semble fonctionner correctement, mais je n'arrive pas à importer de modules depuis mon dossier global de modules. J'obtiens l'erreur suivante,

Error: Cannot find module <module>

Si j'exécute ceci : node -e require.paths la réponse que j'obtiens est la suivante :

[ '/usr/local/lib/node_modules',
  '/Users/Me/.node_modules',
  '/Users/Me/.node_libraries',
  '/usr/local/Cellar/node/0.4.12/lib/node' ]

Ce qui est correct, mes modules sont en effet installés dans /usr/local/lib/node_modules. Cependant, lorsque j'essaie d'exécuter un script, j'obtiens ceci :

Error: Cannot find module 'socket.io'
    at Function._resolveFilename (module.js:326:11)
    at Function._load (module.js:271:25)
    at require (module.js:355:19)
    at Object.<anonymous> (/Users/Me/node/server.js:2:10)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at Array.<anonymous> (module.js:430:10)
    at EventEmitter._tickCallback (node.js:126:26)

Mon fichier .bash_profile ressemble à ceci :

export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"

J'apprécierais vraiment de l'aide, je n'ai aucune idée de la raison pour laquelle je ne peux pas importer de bibliothèques.

163voto

Joel B Points 881

Node.js utilise la variable environnementale NODE_PATH pour permettre de spécifier des répertoires supplémentaires à inclure dans le chemin de recherche du module. Vous pouvez utiliser la fonction npm lui-même pour vous indiquer où les modules globaux sont stockés avec l'option npm root -g commandement. En combinant ces deux éléments, vous pouvez vous assurer que les modules globaux sont inclus dans votre chemin de recherche à l'aide de la commande suivante (sous Linux)

export NODE_PATH=$(npm root --quiet -g)

148voto

Tadeusz Wójcik Points 2365

Si vous utilisez npm >=1.0, vous pouvez utiliser npm link <global-package> pour créer un lien local vers un paquet déjà installé globalement. ( Attention : le système d'exploitation doit prendre en charge les liens symboliques. )

Mais cela ne va pas sans poser de problèmes.

npm link est un outil de développement. Il est génial pour gérer les paquets sur votre boîte de développement locale. Mais déployer avec npm link, c'est en fait s'exposer à des problèmes, puisqu'il est super facile de mettre à jour des choses sans s'en rendre compte.

Vous pouvez également installer les paquets localement ou globalement.

Pour plus d'informations, voir

80voto

Nick Sotiros Points 93

Vous pouvez utiliser npm link pour créer un lien symbolique vers votre paquet global dans votre dossier de projets.

Exemple :

$ npm install -g express
$ cd [local path]/project
$ npm link express

Tout ce qu'il fait est de créer un dossier node_modules local et de créer un lien symbolique express -> [répertoire global]/node_modules/express qui peut alors être résolu par require('express')

26voto

user5341372 Points 795

Installez n'importe quel paquet globalement comme ci-dessous :

$ npm install -g replace  // replace is one of the node module.

Comme ce module replace est installé globalement, si vous consultez votre dossier de modules node, vous ne verrez pas le module replace et vous ne pourrez donc pas utiliser ce paquetage en utilisant require('replace').

parce qu'avec require, vous ne pouvez utiliser que les modules locaux présents dans le dossier des modules de votre nœud.

Pour utiliser le module global, vous devez le lier au chemin du module de nœud à l'aide de la commande ci-dessous.

$ npm link replace

Maintenant, retournez voir votre dossier de modules de nœuds, vous pourrez y voir le module replace et l'utiliser avec require('replace') dans votre application car il est lié à votre module de nœuds local.

Veuillez me faire savoir si vous avez besoin d'éclaircissements supplémentaires.

20voto

ling Points 177

Vous pouvez utiliser require avec le chemin d'accès au répertoire du module global comme argument.

require('/path/to/global/node_modules/the_module');

Sur mon Mac, j'utilise ceci :

require('/usr/local/lib/node_modules/the_module');

Comment savoir où se trouvent vos modules globaux ? --> Où npm installe-t-il les paquets ?

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