web-dev-qa-db-fra.com

Comment résoudre l'erreur "Impossible de trouver le module" en utilisant Node.js?

Après avoir extrait un module de GitHub et suivi les instructions pour le construire, je l’insère dans un projet existant en utilisant:

> npm install ../faye

Cela semble faire l'affaire:

> npm list
/home/dave/src/server
└─┬ [email protected]
  ├── [email protected]
  ├── [email protected]
  └── [email protected]

Mais Node.js ne trouve pas 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.<anonymous> (/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 ne sais trop où regarder ensuite. Aucune suggestion?

487
Dave Causey

L'utilisation de npm install installe le module uniquement dans le répertoire en cours (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 globalement à l'aide de npm install -g.

D'habitude, j'installe la plupart des paquets localement pour qu'ils soient archivés avec le code de mon projet.

Mise à jour (3/2016):

J'ai reçu beaucoup de critiques pour ma réponse, en particulier le fait que je vérifie les packages dont dépend mon code. Il y a quelques jours, une personne a publié tous ses packages ( https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp ) qui ont déclenché une réaction, Babel, et à peu près tout le reste. Espérons qu'il soit clair maintenant que si vous avez du code de production, vous ne pouvez pas compter sur NPM pour gérer vos dépendances. 

430
Bill

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

rm -rf node_modules
npm install
376
carelesslyChoosy
npm install --save module_name

Par exemple, si l'erreur est:

{[Erreur: impossible de trouver le code 'module_root/.npm/form-data']: 'MODULE_NOT_FOUND'} 

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

74
Piyush Chordia

Cela se produit lorsqu'une première installation de npm a échoué pour une raison quelconque (SIGINT de npm), ou que le retard était trop long ou que les données sont corrompues . Réessayer une installation de npm n'enregistre pas le problème.

Une erreur s'est produite lors de la première vérification de npm. Le meilleur choix est donc de supprimer le fichier et de redémarrer l'installation de npm.

16
Alex Werner

Pour les utilisateurs de TypeScript, si vous importez un module de noeud intégré (tel que http, path ou url) et que vous obtenez une erreur telle que "Cannot find module "x", vous pouvez corriger l'erreur en exécutant

npm install @types/node --save-dev

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

14
mgthomas99

Si vous utilisez nvm, vérifiez que les nœuds_modules existants liant d'autres bibliothèques sont compilés pour la version correcte de Node.js.

J'avais la même erreur. La raison en était la suivante: Nous utilisons nvm puisque 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 l'instant), Node.js 6. Node.js 6 est le apt-get installation.

Nous utilisons également l'outil pm2 pour déployer.

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

Ainsi, lorsque j'ai essayé de passer en mode cluster, l'application n'a pas pu démarrer car les liaisons compilées pour 5.6 échouent avec ce message.

J'ai résolu ce problème en redémarrant pm2 lorsque les paramètres NVM sont appliqués. Les scripts de démarrage doivent également être corrigés.

8
Ilya Sheershoff

Supprimez votre dossier racine node_module de votre projet (par exemple: myApp) . Accédez au dossier myApp, puis tapez la commande under de terminal

>myApp>npm install

Il installera tous les modules de dépendance nécessaires à votre projet.

6
PrashanthiDevi

J'ai vécu cette erreur hier. Il m'a fallu un certain temps pour comprendre que l'entrée main dans package.json désignait un fichier que j'avais déplacé. Une fois que j'ai mis à jour que l'erreur a disparu et le package a fonctionné.

4
ukosteopath

Spécifiez le chemin d'accès au dossier wrestler, qui se trouvera dans le dossier node_modules comme suit: var rest = required ('./ node_modules/wrestler');

Cela a fonctionné pour moi.

4
Srishti Singh

J'ai rencontré le même problème quand un autre membre de l'équipe a mis à jour package.json dans SVN. Le simple fait de supprimer le répertoire node_modules n'a pas aidé. Voici comment j'ai résolu le problème:

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

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

3
Soumya Kanti

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

3
Edgar Chavolla

CONSEIL PRO:

Cette erreur m'est arrivée alors que je luttais contre la fatigue et les maladies bénignes, car j'ai tapé node blah au lieu de npm blah.

Le message d'erreur reçu n'était pas assez en colère pour me prévenir de ma propre folie!

2
Dave

Je peux ajouter un endroit supplémentaire à vérifier; le package que j'essayais d'utiliser était un autre de mes propres packages que j'avais publié sur un référentiel NPM privé. J'avais oublié de configurer correctement la propriété 'main' dans le package.json. Le paquet se trouvait donc dans le dossier node_modules du paquet consommateur, mais le message "impossible de trouver le module" a été trouvé. Il m'a fallu quelques minutes pour réaliser ma gaffe. :-(

1
martinp999

Dans mon cas, UNMET PEER DEPENDENCY redux@^3.0.0 était à l'origine de ce message d'erreur, affichez-les tous et réinstallez les modules manquants à l'aide de --save

npm install redux --save
1
Ursu Alexandr

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

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

1
MrCranky

Veuillez installer la nouvelle version 3 de la CLI (npm install -g ionic @ latest). 

Si ce problème persiste dans CLI v3. Je vous remercie!

0
Limbani Akash

Ce problème est survenu lors de l'utilisation de webpack avec webpack-dev-middleware.

Avait transformé un seul fichier en un dossier .

L'observateur semblait ne pas voir le nouveau dossier et le module manquait maintenant.

Fixé en redémarrant le processus.

0
Chris

Si le paquet installé réussit, allez dans votre dossier node_modules, puis vérifiez le fichier et le chemin. Puis importer. J'espère que cela t'aides.

0
Nasir Khan

Supprimer le noeud/npm puis réinstaller la version stable (pas la dernière) 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/
0
Kal

Je viens de trouver un scénario inhabituel qui peut être utile à quelqu'un et qui est en quelque sorte un redingote.

J'obtenais également l'erreur de recherche du module, mais étrangement, 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 ... c’était une faute que (apparemment) l’installation basée sur Mac basée sur Mac était parfaitement heureuse d’ignorer.

L'include ressemblait à ceci:

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

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

Notez la différence de casse entre le «s» et le «S» entre le code et le nom du fichier.

Donc, il est fort probable qu’aucune des solutions proposées ici ne résolve votre problème, vérifiez de nouveau que vous n’utilisez pas les caractères de votre nom de fichier inclus! :)

et DUH!

0
Genia S.