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.

1voto

xpagesbeast Points 399

Dans mon cas,

npm install -D tslib @types/node

a résolu mon problème, j'ai ensuite pu exécuter

ts-node index.ts

avec succès.

0voto

Belgor Points 183

J'essayais de publier mon propre package, puis de le inclure dans un autre projet. J'ai eu ce problème à cause de la façon dont j'ai construit le premier module. J'utilise l'exportation ES2015 pour créer le module, par exemple, disons que le module ressemble à cela :

export default function(who = 'world'){
    return `Bonjour ${who}`;
}

Après la compilation avec Babel et avant d'être publié :

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];

    return 'Bonjour ' + who;
};

Donc après npm install nom-du-module dans un autre projet (non ES2015), j'ai dû faire

var bonjour = require('nom-du-module').default;

Pour réellement importer le package.

J'espère que cela aide !

0voto

Chris Points 432

Rencontré ce problème en utilisant webpack avec webpack-dev-middleware.

Avait transformé un fichier unique en un dossier.

Le watcher semblait ne pas voir le nouveau dossier et le module était maintenant manquant.

Réparé en redémarrant le processus.

0voto

Soumya Kanti Points 33

J'ai rencontré le même problème lorsque quelqu'un d'autre dans l'équipe a mis à jour package.json dans SVN. Simplement en supprimant le répertoire node_modules n'a pas aidé. Comment j'ai résolu le problème est :

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

J'espère que cela aidera quelqu'un !

0voto

Mohammed Abo-zaid Points 317

Peut-être que comme moi, vous avez défini 'view engine' dans express pour un moteur qui n'existe pas, ou avez essayé d'utiliser un moteur de modèle non enregistré. Assurez-vous d'utiliser : app.engine('nom du moteur', moteur) app.set('view engine', 'nom du moteur')

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