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.

10voto

MrCranky Points 1146

Cette erreur peut survenir si vous utilisez la directive require pour un module qui a un champ main manquant ou incorrect dans son package.json. Bien que le module lui-même soit installé, npm/node doit utiliser un seul fichier .js comme point d'entrée vers votre module. Si le champ main n'est pas présent, il recherche par défaut un fichier index.js dans le dossier de votre module. Si le fichier principal de votre module n'est pas appelé index.js, il ne pourra pas être require.

Erreur découverte en transformant un module basé sur browserify en un module CommonJS require-able ; browserify ne se souciait pas de l'absence du champ main, et donc l'erreur était passée inaperçue.

5voto

Yasir Points 103
  • Exécutez les commandes suivantes, étape par étape :

  • npm cache clean -force

  • rm package-lock.json

  • rm -r node_modules

  • npm i --save --legacy-peer-deps

4voto

PrashanthiDevi Points 65

Supprimez votre dossier racine node_module de votre projet (par exemple : myApp). Allez dans le dossier myApp puis tapez la commande ci-dessous dans le terminal

>myApp>npm install

Cela installera tous les modules de dépendance requis pour votre projet.

4voto

Dave Points 209

CONSEIL DE PRO:

Cette erreur m'est arrivée, alors que je luttai contre la fatigue et une légère maladie, car j'ai tapé node blah au lieu de npm blah.

Le message d'erreur reçu n'était pas assez explicite pour me mettre en garde contre ma propre bêtise!

4voto

Genia S. Points 12190

Je viens de trouver un scénario inhabituel qui pourrait être utile à quelqu'un et qui est un peu une fausse piste.

Je recevais également l'erreur Cannot Find Module mais curieusement tout fonctionnait parfaitement dans mon environnement Node.js local (hébergé sur Mac). Ce problème n'est apparu que lorsque le code a été déployé sur notre serveur Linux.

Eh bien... il s'est avéré qu'il s'agissait d'une faute de frappe que l'installation de Node.js basée sur Mac semblait parfaitement ignorer.

L'inclusion ressemblait à ceci :

var S3Uploader = require('./S3Uploader.class');

Mais le fichier réel s'appelait "s3Uploader.class.js"

Remarquez la différence de casse entre le 's' et le 'S' entre le code et le nom de fichier.

Donc, au cas où aucune des autres solutions ici ne résoudrait votre problème, vérifiez trois fois que vous ne faites pas d'erreur de casse des caractères dans le nom de fichier inclus ! :)

et DÉH!

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