Comment résoudre l'erreur «Impossible de trouver le module» à l'aide de Node.js?


617

Après avoir retiré un module de GitHub et suivi les instructions pour le construire, j'essaye de le tirer dans un projet existant en utilisant:

> npm install ../faye

Cela semble faire l'affaire:

> 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 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 pas trop où regarder ensuite. Aucune suggestion?


8
Le node_modulesrépertoire devrait se trouver à la racine de votre projet, ainsi que app.jsdans votre cas. Pourquoi avez-vous utilisé ..le chemin d'installation npm?
Alex Wayne

1
Après avoir changé "npm install ../faye" en "npm install ../faye/build", cela fonctionne comme prévu. Je ne sais pas à quel point c'est typique, mais faye crée un répertoire de construction quand il est construit et y met 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.
Dave Causey

2
J'ai résolu le problème, mais je n'ai pas vraiment résolu ma vraie question, qui était de savoir comment résoudre ce problème. J'essaierai de proposer quelques suggestions pour améliorer npm et / ou le noeud afin qu'il soit plus facile pour les nouveaux arrivants d'éviter cette situation.
Dave Causey

1
Passez par ce lien , vous pouvez avoir une idée de l'endroit où exactement il ne parvient pas à rechercher vos modules ..
Amol M Kulkarni

1
Vérifiez la météo, vous êtes dans le même dossier où vous l'avez installé? si vous ne l'avez pas installé globalement.
Ashwani Panwar

Réponses:


513

L'utilisation de npm installinstalle le module dans le répertoire courant uniquement (dans un sous-répertoire appelé node_modules). App.js se trouve- home/dave/src/server/t-il sous ? 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 en utilisant npm install -g.

J'installe généralement la plupart des packages localement afin qu'ils soient enregistrés avec mon code de projet.

Mise à jour (8/2019):

De nos jours, vous pouvez utiliser le fichier package-lock.json , qui est généré automatiquement lorsque npm modifie votre répertoire node_modules. Par conséquent, vous pouvez package-lock.jsonignorer l'archivage des packages, car il suit les versions exactes de vos nœuds_modules, que vous utilisez actuellement. Pour installer des packages au package-lock.jsonlieu d' package.jsonutiliser la commande npm ci.

Mise à jour (3/2016):

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


264
"J'installe généralement la plupart des packages localement afin qu'ils soient enregistrés avec mon code de projet." Il est généralement préférable de package.jsonrépertorier les modules npm dont vous dépendez et d'ignorer le node_modulesdossier. Il suffit ensuite de procéder npm installà la configuration après avoir cloné le dépôt.
Alex Wayne

53
En plus d' package.jsonénumérer les dépendances, j'aime garder de bonnes copies connues des choses dont je dépend. L'espace disque est bon marché et si npm ou le paquet disparaît de npm, j'aurai toujours un projet pleinement fonctionnel dans mon référentiel.
Bill

165
En tant qu'ancien développeur, j'ai failli m'étrangler en lisant le «paradigme» des développeurs de nœuds selon lequel «l'espace disque est bon marché». J'ai des bibliothèques que j'utilise. L'idée que je pourrais avoir 100 copies (ou pire, près de copies) me fait mal au ventre. L'espace disque est bon marché, mais le temps de maintenance est cher. Peut-être que si vous faites un projet de jouet unique, l'entretien est bon marché. Pour un travail réel, cependant, la maintenance est coûteuse et n'a aucune incidence sur le coût de l'espace disque.
Lloyd Sargent

66
Je ne comprends vraiment pas ce dernier commentaire. Personne ne dit avoir 100 copies de n'importe quel morceau de code, juste avoir 1 copie du code dont dépend votre projet. L'alternative est d'avoir un projet non fonctionnel si NPM ou la dépendance disparaît un jour. Je pense que réécrire une dépendance à partir de zéro est également assez cher. En passant, j'ai travaillé chez Microsoft pendant 10 ans et nous avons toujours fait vérifier les dépendances tierces dans notre arbre source.
Bill

33
@LloydSargent Avoir "NEAR copies" n'est pas pire, c'est mieux , car chaque projet a une dépendance spécifique, que vous avez définie, et le reste de votre code dépend. Si vous aviez les mêmes versions sur plusieurs projets, alors si vous mettez à jour quelque chose, vous devez tout mettre à jour . Épinglant dépendances permet des mises à niveau sensiblement au coup par coup moins d' entretien. Du vrai travail, des projets non-jouets.
Dave Newton

459

J'ai eu un problème très similaire. La suppression de l'intégralité du node_modulesdossier et la réinstallation ont fonctionné pour moi:

rm -rf node_modules
npm install

13
Je ferais aussi un cache npm propre, juste par sécurité :)
Tony Tai Nguyen

1
Probablement une bonne première étape de dépannage à chaque fois qu'un problème de dépendance étrange apparaît que npm install/ npm updatene résoudra pas. Cela a résolu un problème où la diffusion Error: Cannot find module 'http-errors'aléatoire commençait à apparaître lorsque j'essayais d'exécuter mon application Express.
Matt Vukas

Étonnant, la réponse de @ carelesslyChoosy a résolu une dépendance manquante. Il semble que la mise à niveau et la rétrogradation avec l'installation de npm en place ne maintiennent pas les choses en ordre.
anguille ghEEz

3
Une étape manquante consiste à supprimer votre fichier package-lock.json avant de l'exécuter npm install.
Rick Quantz

cela n'a pas fonctionné pour moi, a même redémarré l'ordinateur;)
Jason G

83
npm install --save module_name

Par exemple, si l'erreur est:

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

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


1
il semble que lorsque je l'ai installé globalement, le dossier npm / node-modules était vide et j'essayais de l'utiliser, ng new project-nameil montrait que certains modules manquaient ... J'ai dû les installer chacun en utilisant la commande donnée. existe-t-il une seule commande pour les installer tous en même temps?
Vishal Nair

25

Pour les utilisateurs de TypeScript, si vous importez un module Node intégré (tel que http, pathou url) et que vous obtenez une erreur telle que "Cannot find module "x"l'erreur peut être corrigée 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.


18

Cela se produit lorsqu'un premier npm installation de s'est arrêtée pour une raison quelconque (SIGINT de npm), ou que le délai était trop long, ou que les données sont corrompues. Réessayer une installation npm ne sauvera pas le problème.

Quelque chose s'est mal passé lors de la première vérification de npm, donc le meilleur choix est de supprimer le fichier et de redémarrer l'installation de npm.


16
cela a diagnostiqué le problème pour moi. j'ai fini par faire npm cache clearet effacer node_modules suivi npm installde résoudre mon problème.
meklarian

9

Si vous utilisez nvm, vérifiez que les modules node_modules existants qui sont des liaisons à d'autres bibliothèques sont compilés pour la version Node.js correcte.

J'avais la même erreur. La raison était la suivante: nous utilisons nvm car 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), l'autre nécessite Node.js 6. Node.js 6 est l' installation apt-get .

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 en vigueur, il utilise donc l'installation apt-get de Node.js (version 6). Ainsi, le démon pm2 principal commence par Node.js 6. Si j'exécute des applications en mode fork, elles démarrent dans des processus distincts et les paramètres nvm sont en vigueur. 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 corrigé cela en redémarrant pm2 lorsque les paramètres nvm sont en vigueur. Les scripts de démarrage doivent également être corrigés.


Comment vérifiez-vous cela?
tamj0rd2

8

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


J'upvoted ce qu'il a résolu mon problème immédiat, et m'a conduit à cette documentation Node.js . Mais je pense que ce n'est pas une réponse globale, car la documentation indique des stratégies alternatives pour localiser les modules.
Graham Klyne

6

J'ai rencontré cette erreur hier. Il m'a fallu un certain temps pour réaliser que l' mainentrée package.jsonpointait vers un fichier que j'avais déplacé. Une fois que j'ai mis à jour, l'erreur a disparu et le package a fonctionné.


2
Sainte vache ... par désespoir, j'ai tapé "Erreur: Impossible de trouver le module" dans google, et j'ai trouvé cette question. Votre réponse a résolu mon problème. Je ne peux pas croire qu'un terme de recherche aussi vague soit la bonne réponse. Bravo à vous et à Google!
Jamon Holmgren

1
Très bien. J'avais réussi à pointer l' mainentrée de mon sous-module dans un répertoire qui était exclu de son référentiel, donc quand j'ai essayé de l'inclure via, npm installcela a fonctionné, mais aucune exportation n'a été trouvée lorsqu'elle était requise dans! Merci beaucoup pour cette réponse évidente mais utile.
Dragos

Merci pour cela. J'ai eu cette situation lors de l'utilisation des espaces de travail Yarn, donc je cherchais partout des algorithmes de résolution de chemins et toutes sortes. :) J'ai été bouleversé par la façon dont le message d'erreur parle de «localiser» le module, et aussi par le fait qu'ESLint donnait des messages d'erreur similaires. Et puis j'ai vu votre réponse et j'ai réalisé que j'étais un imbécile. Merci!
Mark Birbeck

5

Supprimez votre node_moduledossier racine de votre projet (par exemple:) myApp. Accédez au myAppdossier, puis tapez la commande ci-dessous à partir du terminal

>myApp>npm install

Il installera tous les modules de dépendances requis pour votre projet.


Pourriez-vous élaborer davantage votre réponse en ajoutant un peu plus de description sur la solution que vous proposez?
abarisone

5

Cette erreur peut être rencontrée si vous requireutilisez un module qui a un mainchamp 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 de votre module. Si le mainchamp n'est pas là, il recherche par défaut index.jsdans le dossier de votre module. Si le fichier principal de votre module ne s'appelle pas index.js, il ne pourra pas le faire require.

Découvert lors de la transformation d'un browserifymodule basé sur un module compatible CommonJS require; browserifyne se souciait pas du mainchamp manquant , et donc l'erreur était passée inaperçue.


4

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

Cela a fonctionné pour moi.


3

Si vous utilisez tapuscrit et obtenez une erreur après avoir installé tous les modules de noeud, supprimez-les package-lock.json. Et puis courez npm install.


2

CONSEIL DE PRO:

Cette erreur m'est arrivée, tout en luttant contre la fatigue et les maladies bénignes, car j'ai tapé node blahau lieu denpm blah .

Le message d'erreur reçu n'était pas assez en colère pour m'alerter sur ma propre folie!


2

J'ai rencontré le même problème lorsque quelqu'un d'autre dans l'équipe a mis package.jsonà jour SVN. Le simple fait de supprimer le node_modulesrépertoire n'a pas aidé. 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!


Merci pour le rappel. Dans mon cas, c'était package-lock.json qui gâchait à nouveau, mais après l'avoir supprimé et node_modules, puis npm installtout était bien.
TaeKwonJoe

6
Si vous supprimez, package.jsoncomment NPM sait-il quoi installer?
Michał

1

Je peux ajouter un autre endroit à vérifier; le package que j'essayais d'utiliser était un autre de mes propres packages que j'avais publié dans un référentiel NPM privé. J'avais oublié de configurer correctement la propriété «principale» dans le package.json. Donc, le paquet était là dans le dossier node_modules du paquet consommateur, mais je recevais "Impossible de trouver le module". Cela m'a pris quelques minutes pour réaliser ma bévue. :-(


1

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

npm install redux --save

1

Supprimer le nœud / 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/

1

Dans Appsome Solutions, nous avons eu le même problème avec notre configuration de projet dactylographié et ajouté "moduleResolution": "node",dans un tsconfig.json l'a résolu.


0

J'essayais de publier mon propre package, puis de l'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 à ça:

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

Après avoir compilé 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 'Hello ' + who;
};

Donc après npm install module-namedans un autre projet (aucun ES2015) je devais faire

var hello = require('module-name').default;

Pour avoir réellement importé le package.

J'espère que cela pourra aider!


0

Vous avez rencontré ce problème lors de l'utilisation webpackavec webpack-dev-middleware.

Avait transformé un seul fichier en dossier .

L'observateur ne semblait pas voir le nouveau dossier et le module était maintenant manquant.

Corrigé en redémarrant le processus.


0

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

J'obtenais é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é être une faute de frappe que (apparemment) l'installation Node.js basée sur Mac était parfaitement heureuse d'ignorer.

L'inclusion 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 de fichier.

Donc - dans le cas étrange qu'aucune des autres solutions ici ne résout votre problème, vérifiez bien que vous n'utilisez pas les caractères dans le nom de fichier inclus! :)

et DUH!


1
Par défaut, le système de fichiers osx (HFS +) est insensible à la casse ... découvert il n'y a pas longtemps, il est définitivement configurable
giulp

0

Peut-être que, comme moi, vous avez défini «view engine» dans express sur un moteur qui n'existe pas, ou avez essayé d'utiliser un moteur de template non enregistré. Assurez-vous que vous utilisez: app.engine('engine name',engine) app.set('view engine','engine name')


0

Veuillez installer la nouvelle CLI v3 (npm install -g ionic @ latest).

Si ce problème est toujours un problème dans CLI v3. Je vous remercie!


0

Si le package est installé avec succès, allez dans votre dossier node_modules puis vérifiez le fichier et le chemin. Importez ensuite. J'espère que cela t'aides.


-3

Tout d'abord, oui, une partie de ma réponse est certainement utile pour résoudre l' erreur signalée par OP. Deuxièmement, après avoir essayé l'étape ci-dessous, j'ai fait face à quelques autres erreurs, et j'ai donc écrit la solution de celles-ci aussi.

(Psst! Je ne sais pas si j'ai réussi à résoudre l'erreur ci-dessus, ou si j'ai enfreint une règle ou un format de réponse, mais j'ai fait face à l'erreur ci-dessus et à d'autres et il m'a fallu beaucoup de temps pour trouver les solutions appropriées pour ces erreurs. J'écris la solution complète parce que si quelqu'un d'autre fait également face à ces erreurs, il espère obtenir une solution ici.)

Donc, en ajoutant et en élaborant la réponse fournie par PrashanthiDevi , et en ajoutant également mon expérience personnelle, la voici:

Je suis nouveau dans toute la partie e2e et tests unitaires. J'ai commencé à regarder cette partie depuis Protractor . Maintenant, j'avais déjà les fichiers dans lesquels les tests étaient écrits, mais je devais exécuter les tests.

J'avais déjà installé tous les logiciels et outils requis, mais lorsque j'ai initialement exécuté le code pour exécuter les tests gulp itest, j'ai eu cette erreur «Impossible de trouver le module» . Après avoir parcouru de nombreuses questions sur SO, j'ai trouvé une réponse qui, selon moi, pourrait aider à trouver une solution.

La personne avait suggéré d'exécuter la commande npm installdans mon dossier de projet.

La raison pour cela était de mettre à jour le dossier node-modules , à l'intérieur de notre dossier de projet, avec tous les fichiers et dépendances requis et nécessaires.

(La partie ci-dessous peut ne pas être pertinente avec cette question, mais pourrait être utile si quelqu'un rencontrait la même situation que celle à laquelle j'étais confrontée.)

L'étape ci-dessus a certainement résolu mon erreur précédente, mais en a jeté une nouvelle! Cette fois, l'erreur étantCould not find chromedriver at '..\node_modules\protractor\selenium\chromedriver' .

Cependant, la solution de cette erreur était assez idiote (et drôle) pour moi. J'avais déjà le fichier chromedriver dans mon dossier sélénium . Mais, il s'avère que l'erreur ci-dessus venait parce que mes fichiers chromedriver étaient dans le dossier sélénium et non dans le dossier chromedriver . Ainsi, la création d'un dossier chromedriver et la copie des fichiers chromedriver ont résolu mon problème!

De plus, pour l' erreur: Expiration du délai d' attente du serveur WebDriver , vous pouvez ajouter cette ligne de code au fichier conf.js à l'intérieur exports.config{}:

seleniumAddress: 'http://localhost:8080/'

J'espère que cela t'aides!


-4

J'ai obtenu la solution simple pour résoudre ce problème.

Supprimez simplement C: \ Users \ UserName \ AppData \ Roaming \ npm \

puis installez le nœud.

Maintenant, votre problème sera résolu.


Il utilise Unix. Pas Windows.
Saif Al Falah

-4

Exécutez uniquement la commande suivante:

npm install

Il installera tous les modules requis dans le node_modulesdossier.


-5
rm -rf node_modules
npm install
npm fund

ce travail pour moi.


-38

Modifiez le répertoire et pointez sur votre dossier de projet actuel, puis "npm install". .

Cela installera toutes les dépendances et modules dans votre dossier de projet.


2
cette réponse ne semble pas être fausse, je pense que le vote négatif est le résultat d'un certain parti pris et de commentaires sarcastiques.
Muqsith

2
autant de downvotes, c'est un peu trop. Ce n'est pas complètement vague. Elle se rapporte à la réponse acceptée. Tout ce que la réponse dit est de le faire npm installdans le bon répertoire. Il n'y a rien de négatif à ce sujet
shinobi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.