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.

9voto

Ben Xu Points 431

Définir la variable d'environnement NODE_PATH pour qu'elle pointe vers votre système global node_modules dossier.

Sous Windows 7 ou supérieur, le chemin d'accès est quelque chose comme %AppData%\npm\node_modules alors que sous UNIX, il pourrait s'agir de quelque chose comme /home/sg/.npm_global/lib/node_modules/ mais cela dépend de la configuration de l'utilisateur.

La commande npm config get prefix pourrait aider à déterminer quel est le bon chemin.

Dans les systèmes UNIX, vous pouvez le faire avec la commande suivante :

export NODE_PATH=`npm config get prefix`/lib/node_modules/

2voto

La réponse la plus simple est d'exécuter node dans le répertoire racine global de npm.

cd $( npm root -g ) && node

0voto

Tereska Points 156

Faire ceci :

  1. créer un simple fichier test.js dans lequel vous n'avez besoin que de votre dépendance (socket.it) 2 sudo dtruss node test.js

vous pouvez voir où le nœud recherche ce fichier

Vous pouvez m'envoyer la sortie de dtruss pour que je l'analyse.

0voto

Darin London Points 29

J'utilise Docker. J'essaie de créer une image Docker qui contient toutes mes dépendances node installées, mais qui peut utiliser mon répertoire app local au moment de l'exécution du conteneur (sans le polluer avec un répertoire node_modules ou un lien). Cela pose des problèmes dans ce scénario. Ma solution est de requérir à partir du chemin exact où se trouve le module, par exemple require('/usr/local/lib/node_modules/socket.io')

0voto

Donghua Liu Points 340

Si vous êtes sous Windows cmd, vous pouvez le faire via FOR /f "tokens=* delims=" %A in ('npm Root --quiet -g') do set "NODE_PATH=%A" ou FOR /f "tokens=* delims=" %%A in ('npm Root --quiet -g') do set "NODE_PATH=%A" dans un fichier batch.

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