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.

610voto

Bill Points 9537

En utilisant npm install, vous installez le module uniquement dans le répertoire actuel (dans un sous-répertoire appelé node_modules). App.js se trouve-t-il sous home/dave/src/server/? Si ce n'est pas le cas et que vous souhaitez utiliser le module à partir de n'importe quel répertoire, vous devez l'installer de manière globale en utilisant npm install -g.

Je préfère généralement installer la plupart des packages localement afin qu'ils soient vérifiés avec mon code de projet.

Mise à jour (8/2019) :

De nos jours, vous pouvez utiliser le fichier package-lock.json, qui est automatiquement généré lorsque npm modifie votre répertoire node_modules. Par conséquent, vous pouvez ne pas inclure la vérification des packages, car le package-lock.json suit les versions exactes de vos node_modules que vous utilisez actuellement. Pour installer des packages à partir de package-lock.json au lieu de package.json, utilisez la commande npm ci.

Mise à jour (3/2016) :

J'ai reçu beaucoup de critiques pour ma réponse, notamment pour le fait de vérifier inclus les packages sur lesquels mon code dépend. Il y a quelques jours, quelqu'un a supprimé tous ses packages (https://kodfabrik.com/journal/i-ve-just-liberated-my-modules) (archivé sur Wayback Machine), ce qui a cassé React, Babel et à peu près tout le reste. J'espère qu'il est maintenant clair que si vous avez du code en production, vous ne pouvez pas compter sur NPM pour maintenir réellement vos dépendances pour vous.

275 votes

"Jeinstalle généralement la plupart des paquets localement afin qu'ils soient vérifiés en même temps que mon code de projet." Il est généralement préférable de créer un fichier package.json listant les modules npm dont vous dépendez et d'ignorer le dossier node_modules. Ensuite, il suffit de faire un npm install pour configurer après avoir cloné le dépôt.

60 votes

En plus de la package.json énumérant les dépendances, j'aime conserver des copies valides des éléments sur lesquels je compte. L'espace disque est bon marché et si npm ou le package disparaît de npm, j'aurai toujours un projet entièrement fonctionnel dans mon dépôt.

0 votes

Merci pour les réponses. Tout ce que j'essaie de faire, c'est d'essayer une version de développement du module à partir de github sans l'installer globalement. Les fichiers app.js et node_modules sont tous deux situés dans /home/dave/src/server. Je vais essayer l'approche package.json, mais j'espérais comprendre exactement ce que je fais de mal ci-dessus pour que d'autres ne répètent pas la même erreur.

600voto

carelesslyChoosy Points 165

J'ai eu un problème très similaire. Supprimer entièrement le dossier node_modules et le réinstaller a fonctionné pour moi:

rm -rf node_modules
npm install

106voto

Piyush Chordia Points 1205
npm installer --save nom_du_module

Par exemple, si l'erreur est:

{ [Error: Cannot find module '/root/.npm/form-data'] code: 'MODULE_NOT_FOUND' }

alors vous pouvez résoudre ce problème en exécutant la commande npm installer --save form-data.

48voto

Xakiru Points 737
rm package-lock.json
rm -r node_modules
npm i

Cela devrait résoudre le problème et installer tous les packages.

42voto

GeorgeEpicGen Points 3

Pour les utilisateurs de TypeScript, si vous importez un module Node intégré (tel que http, path ou url) et que vous obtenez une erreur telle que "Cannot find module "x" alors l'erreur peut être corrigée en exécutant

npm install @types/node --save-dev

La commande importera les définitions TypeScript de NodeJS dans votre projet, vous permettant d'utiliser les modules intégrés de Node.

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