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.

0voto

Kal Points 72

Supprimer node/npm puis réinstaller la version stable (pas la plus récente) a fonctionné pour moi.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/

0voto

maverick Points 80

Dans mon cas, je n'utilisais pas la bonne version de nvm.

0voto

skygate Points 53

Un cas rare mais également possible est une faute de frappe dans le nom du module. J'ai oublié le "s" dans le nom du fichier lors de l'exécution node .\util.js, où il devrait être node.\utils.js et je n'ai trouvé aucune solution parmi toutes les réponses à cette question jusqu'à ce que je découvre que je ne peux pas exécuter le fichier même si je supprime tout !

0voto

DerpyNerd Points 2183

Apparemment, en juger par cette question, il y a BEAUCOUP de causes possibles.

Peut-être que cela aidera quelqu'un, en espérant que personne n'a été aussi stupide que moi pour utiliser cette technique:

Vérifiez si vous avez un dossier node_modules haut dans l'arborescence des dossiers.

Scénario 1: Si vous avez déjà eu un dossier de projets, où vous partagiez un dossier node_modules entre plusieurs projets, vous n'avez peut-être pas eu de problèmes

|- projets
| |- node_modules     <- OK
| |- projet1         <- Pas de dossier node_modules
| | |- package.json
| |- projet2         <- Pas de dossier node_modules
| | |- package.json

Scénario 2: Si vous ajoutez un troisième projet d'une nature différente, vous pouvez choisir de garder un dossier node_modules dans ce projet:

|- projets
| |- node_modules     <- Peut être utilisé par le projet 3
| |- projet1         <- Pas de dossier node_modules
| | |- package.json
| |- projet2         <- Pas de dossier node_modules
| | |- package.json
| |- projet3
| | |- node_modules   <- Paquets pour le projet 3 seulement
| | |- package.json

Je suppose que certains paquets dans le dossier node-modules du projet 3 dépendent de paquets qu'il trouve (ou ne trouve pas) dans le dossier node_modules du dossier parent. Même si vous vous attendez à ce que les dépendances soient trouvées dans le dossier node_modules du projet 3. Peut-être que c'est à cause de la manière dont certains paquets sont importés et référencés?

Il va sans dire que c'est un désastre qui attend de se produire :)

0voto

majestzim Points 13

J'ai rencontré ce problème lorsque je mettais à jour la version de node tout en installant plusieurs versions de packages différentes. Le projet a créé une image/container docker pour travailler.

Le problème était que l'image Docker n'était pas recréée lorsque j'ajoutais un package et reconstruisais le projet. Les informations correctes se trouvaient dans mes fichiers package.json et package-lock.json locaux.

Supprimer l'image Docker et non simplement le container a résolu mon problème.

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