753 votes

Comment résoudre l'erreur "Cannot find module" en utilisant Node.js?

Après avoir téléchargé un module depuis GitHub et suivi les instructions pour le construire, j'essaie de l'intégrer dans un projet existant en utilisant :

> npm install ../faye

Cela semble fonctionner :

> npm list
/home/dave/src/server
 faye@0.7.1
   cookiejar@1.3.0
   hiredis@0.1.13
   redis@0.7.1

Mais Node.js ne peut pas trouver le module :

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object. (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Je veux vraiment comprendre ce qui se passe ici, mais je suis un peu perdu quant à l'endroit où chercher ensuite. Des suggestions ?

9 votes

Le répertoire node_modules doit être situé à la racine de votre projet, aux côtés de app.js dans votre cas. Pourquoi avez-vous utilisé .. dans le chemin d'installation de npm ?

0 votes

Mon intention était d'avoir deux répertoires - un pour les sources de faye provenant de github et un autre pour mon projet qui nécessite faye. En installant à partir du répertoire faye (../faye), je m'attendais à ce qu'il installe le module localement sous node_modules, ce qui semble avoir été le cas. Je ne veux pas installer globalement car il y a d'autres projets qui dépendent d'une version stable de faye.

3 votes

Après avoir changé "npm install ../faye" en "npm install ../faye/build", cela fonctionne comme prévu. Je ne sais pas si c'est typique, mais faye crée un répertoire de build lorsqu'il est construit et y place une copie de package.json. npm ne se plaint pas de package.json au niveau racine, mais il fait référence à des fichiers qui n'existent pas à ce niveau.

23voto

Alex Werner Points 175

Cela se produit lorsque une première npm installation a planté pour une raison quelconque (SIGINT de npm), ou que le délai était trop long, ou que les données sont corrompues. Essayer à nouveau d'installer npm ne résoudra pas le problème.

Quelque chose s'est mal passé lors de la première vérification de npm, donc la meilleure option est de supprimer le fichier et de redémarrer l'installation de npm.

19voto

ukosteopath Points 163

J'ai rencontré cette erreur hier. Il m'a fallu un certain temps pour réaliser que l'entrée main dans package.json pointait vers un fichier que j'avais déplacé. Une fois que j'ai mis à jour cela, l'erreur a disparu et le package a fonctionné.

17voto

Edgar Chavolla Points 31

Vérifiez si la variable d'environnement NODE_PATH est correctement définie et pointe vers le chemin des node_modules. nodejs utilise cette variable pour rechercher les bibliothèques

13voto

Ilya Sheershoff Points 81

Si vous utilisez nvm, vérifiez que les node_modules existants, qui sont des liens vers d'autres bibliothèques, sont compilés pour la bonne version de Node.js.

J'avais la même erreur. La raison en était la suivante : nous utilisons nvm car nous exécutons deux applications sur un serveur, l'une nécessite Node.js 5.6 car elle utilise node-gd (qui ne fonctionne pas sur Node.js 6 pour le moment), l'autre nécessite Node.js 6. Node.js 6 est l'installation par apt-get.

Nous utilisons également l'outil pm2 pour le déploiement.

Ainsi, le paramètre par défaut est que le processus pm2 démarre lorsque nvm n'est pas en cours, donc il utilise l'installation apt-get de Node.js (version 6). Donc, le principal démon pm2 démarre avec Node.js 6. Si je lance des applications en mode fork, elles démarrent dans des processus distincts et les paramètres nvm sont en cours. Lorsque je lance des applications en mode cluster, elles héritent de l'environnement non-nvm.

Donc, lorsque j'ai essayé de passer en mode cluster, l'application n'a pas démarré car les liens compilés pour 5.6 échouent avec ce message.

J'ai corrigé cela en redémarrant pm2 lorsque les paramètres nvm sont en cours. Les scripts de démarrage doivent également être corrigés.

11voto

james ace Points 625

Si toutes les autres méthodes ne fonctionnent pas pour vous... Essayez

npm link package_name

par exemple

npm link webpack
npm link autoprefixer

etc

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