222 votes

NPM global install "cannot find module" (Impossible de trouver le module)

J'ai écrit un module que j'ai publié sur npm il y a un instant (https://npmjs.org/package/wisp).

Il s'installe donc bien à partir de la ligne de commande :

$ npm i -g wisp

Cependant, lorsque je l'exécute à partir de la ligne de commande, je continue à obtenir une erreur indiquant qu'Optimist n'est pas installé :

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

Cependant, j'ai spécifié dans package.json comme une dépendance :

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

Quelqu'un sait-il ce qu'il faut faire pour que cela fonctionne ? Je sais que cela a à voir avec la partie bin qui ajoute l'exécutable à bin et les node_modules dans ce répertoire sont vides. Je ne sais pas comment résoudre ce problème.

0 votes

Que se passe-t-il si vous installez sans l'option -g ?

0 votes

Il installe un dossier node_modules dans le répertoire courant qui contient wisp.

0 votes

Je sais. Tu as toujours l'erreur ?

396voto

Neek Points 1384

Pour tous ceux qui rencontrent ce problème, j'ai eu ce problème à cause de mon npm l'installation dans un endroit qui n'est pas sur mon NODE_PATH .

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

Mon NODE_PATH était vide, et en exécutant npm install --global --verbose promised-io a montré qu'il s'installait dans /opt/lib/node_modules/promised-io :

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

Mon script échoue sur require('promised-io/promise') :

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

J'ai probablement installé node et npm à partir des sources en utilisant configure --prefix=/opt . Je ne sais pas pourquoi cela les a rendus incapables de trouver les modules installés. La solution pour l'instant est de faire pointer NODE_PATH vers le bon répertoire :

export NODE_PATH=/opt/lib/node_modules

Mon require('promised-io/promise') réussit maintenant.

11 votes

Où définir ce NODE_PATH ? ?

8 votes

@sandy L'emplacement de la variable d'environnement NODE_PATH dépend de votre système d'exploitation. J'utilise une saveur de Linux, donc j'ai utilisé export NODE_PATH=... pour le définir dans le shell local de telle sorte qu'il soit exporté vers les commandes exécutées dans ce shell. Pour rendre le changement persistant ou disponible pour tous les interpréteurs de commandes, mettez-le dans .profile ou similaire. Le concept dans son ensemble est d'une complexité déconcertante pour le néophyte. help.ubuntu.com/community/EnvironmentVariables . Pour Windows, vous voudrez passer à Linux. OK, je plaisante. Essayez computerhope.com/issues/ch000549.htm ou le googler.

13 votes

Pour OSX Lion, ce qui suit a fonctionné pour moi ... export NODE_PATH=/usr/local/lib/node_modules J'ai utilisé 'locate node_modules' pour trouver le bon chemin.

43voto

Irving Zhou Points 11

Ajouter ceci au début du prog(mac) :

module.paths.push('/usr/local/lib/node_modules');

4 votes

Y a-t-il un moyen de le faire d'une manière non spécifique à l'OS ?

0 votes

@UpTheCreek ce est d'une manière non spécifique. C'est du code JS, vous avez juste besoin de pointer vers un node_modules qui a le module que vous recherchez.

0 votes

@Adelin - Il s'agit d'une solution spécifique au système d'exploitation car l'emplacement des modules globaux de nœuds est spécifique au système d'exploitation. Par exemple, si vous développez sous Windows et que vous utilisez Linux en production, ce n'est pas une bonne solution.

16voto

randomness Points 126

Par défaut, node ne regarde pas dans le module /usr/local/lib/node_module pour charger les modules globaux. Référez-vous au chargement des modules expliqué dans http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

Donc soit vous devez 1)ajouter le module /usr/local/lib/node_module à NODE_PATH et l'exporter soit 2)copier les modules node installés dans /usr/local/lib/node . (Comme expliqué dans le lien pour le chargement du module, node cherchera dans ce chemin et fonctionnera).

14voto

student Points 87

La correction générique suivante s'applique à tous les modules. Par exemple avec request-promise .

Remplacer

npm install request-promise --global

Avec

npm install request-promise --cli

a travaillé ( source ) et aussi pour globals y inherits

Essayez également de définir la variable d'environnement

NODE_PATH=%AppData%\npm\node_modules

11voto

Will Silveira Points 383

Pour ceux (comme moi) pour qui rien d'autre n'a fonctionné, essayez ceci :

brew cleanup
brew link node
brew uninstall node
brew install node

J'espère que cela aidera quelqu'un :)

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