it-swarm.com.de

Wie löse ich den Fehler "Kann Modul nicht finden" mithilfe von Node.js?

Nachdem ich ein Modul von GitHub heruntergezogen und den Anweisungen zum Erstellen gefolgt habe, versuche ich, es in ein vorhandenes Projekt zu ziehen.

> npm install ../faye

Dies scheint den Trick zu tun:

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

Node.js kann das Modul jedoch nicht finden:

> 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)

Ich möchte wirklich verstehen, was hier vor sich geht, aber ich bin etwas ratlos, wo ich als nächstes suchen muss. Irgendwelche Vorschläge?

487
Dave Causey

Bei Verwendung von npm install wird das Modul nur im aktuellen Verzeichnis installiert (in einem Unterverzeichnis mit dem Namen node_modules). Befindet sich app.js unter home/dave/src/server/? Wenn dies nicht der Fall ist und Sie das Modul aus einem beliebigen Verzeichnis verwenden möchten, müssen Sie es global mit npm install -g installieren.

Normalerweise installiere ich die meisten Pakete lokal, damit sie zusammen mit meinem Projektcode eingecheckt werden.

Aktualisierung (3/2016):

Ich habe eine Menge Flak für meine Antwort erhalten, insbesondere dass ich die Pakete einchecke, von denen mein Code abhängt. Vor einigen Tagen veröffentlichte jemand seine Pakete ( https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp ), die React, Babel, und so ziemlich alles andere. Hoffentlich ist es jetzt klar, dass Sie mit Produktionscode nicht darauf vertrauen können, dass NPM Ihre Abhängigkeiten für Sie aufrechterhält. 

430
Bill

Ich hatte ein sehr ähnliches Problem. Das Entfernen des gesamten node_modules-Ordners und die Neuinstallation funktionierten für mich

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

Wenn der Fehler beispielsweise lautet:

{[Fehler: Kann Modul '/root/.npm/form-data' nicht finden.] Code: 'MODULE_NOT_FOUND'} 

dann können Sie dieses Problem beheben, indem Sie den Befehl npm install --save form-data ausführen.

74
Piyush Chordia

Dies ist der Fall, wenn eine erste npm install aus irgendeinem Grund abgestürzt ist (SIGINT von npm), oder dass die Verzögerung zu lang war oder die Daten beschädigt sind . Wenn Sie eine npm-Installation erneut ausführen, wird das Problem nicht gespeichert.

Bei der ersten Überprüfung von npm ist ein Fehler aufgetreten. Daher ist es am besten, die Datei zu entfernen und die Installation von npm neu zu starten.

16
Alex Werner

Wenn Sie für TypeScript-Benutzer ein integriertes Knotenmodul (z. B. http, path oder url) importieren und ein Fehler wie "Cannot find module "x" angezeigt wird, kann der Fehler durch Ausführen behoben werden

npm install @types/node --save-dev

Der Befehl importiert die NodeJS TypeScript-Definitionen in Ihr Projekt, sodass Sie die integrierten Module von Node verwenden können.

14
mgthomas99

Wenn Sie nvm verwenden, prüfen Sie, ob vorhandene node_modules, die Bindungen zu anderen Bibliotheken sind, für die korrekte Version von Node.js kompiliert sind.

Ich hatte den gleichen Fehler. Der Grund war folgender: Wir verwenden nvm, da wir zwei Apps auf einem Server ausführen. Für eine Version ist Node.js 5.6 erforderlich, da Node-Gd (der derzeit nicht auf Node.js 6 ausgeführt wird) und die andere Version benötigt wird Node.js 6. Node.js 6 ist die Installation von apt-get .

Wir verwenden auch das pm2-Tool zum Bereitstellen.

Standardmäßig wird der pm2-Prozess gestartet, wenn nvm nicht aktiv ist. Daher wird die apt-get-Installation von Node.js (Version 6) verwendet. Der pm2-Haupt-Daemon beginnt also mit Node.js 6. Wenn ich Anwendungen im Fork-Modus ausführen, werden sie in separaten Prozessen gestartet und die nvm-Einstellungen sind wirksam. Wenn ich Anwendungen im Cluster-Modus ausführen, erben sie die Nicht-NVM-Umgebung.

Beim Versuch, in den Cluster-Modus zu wechseln, konnte die Anwendung nicht gestartet werden, da die für 5.6 kompilierten Bindungen mit dieser Nachricht fehlschlagen.

Ich habe das behoben, indem ich pm2 neu gestartet habe, wenn die nvm-Einstellungen wirksam sind. Auch Startskripte sollten behoben sein.

8
Ilya Sheershoff

Entfernen Sie Ihren node_module-Stammordner aus Ihrem Projekt (zB: myApp) . Wechseln Sie in den Ordner myApp und geben Sie den folgenden Befehl vom Terminal aus ein

>myApp>npm install

Es werden alle für Ihr Projekt erforderlichen Abhängigkeitsmodule installiert.

6
PrashanthiDevi

Ich habe diesen Fehler gestern erlebt. Es dauerte eine Weile, bis mir klar wurde, dass der main-Eintrag in package.json auf eine Datei zeigte, die ich verschoben hatte. Nach dem Update ist der Fehler verschwunden und das Paket hat funktioniert.

4
ukosteopath

Geben Sie den Pfad zum Wrestler-Ordner an, der sich im Ordner node_modules befindet: var rest = required ('./ node_modules/wrestler');

Das hat bei mir funktioniert.

4
Srishti Singh

Ich hatte das gleiche Problem, als jemand anderes im Team package.json in SVN aktualisiert hat. Nur das node_modules-Verzeichnis zu entfernen, hat nicht geholfen. Wie ich das Problem gelöst habe, ist:

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

Hoffe das hilft jemandem!

3
Soumya Kanti

Prüfen Sie, ob die Umgebungsvariable NODE_PATH richtig gesetzt ist und auf den Pfad node_modules zeigt. nodejs verwendet diese Variable, um nach Bibliotheken zu suchen

3
Edgar Chavolla

PRO TIPP:

Dieser Fehler ist mir bei der Bekämpfung von Müdigkeit und leichter Krankheit passiert, weil ich node blah anstelle von npm blah eingegeben habe.

Die Fehlermeldung war nicht wütend genug, um mich auf meine eigene Torheit aufmerksam zu machen!

2
Dave

Ich kann noch einen Ort hinzufügen, den ich überprüfen kann. Das Paket, das ich verwenden wollte, war eines meiner eigenen Pakete, die ich in einem privaten NPM-Repo veröffentlicht hatte. Ich hatte vergessen, die 'main'-Eigenschaft in package.json richtig zu konfigurieren. Das Paket befand sich also im Ordner node_modules des verbrauchenden Pakets, aber ich bekam "Modul nicht finden". Ich habe ein paar Minuten gebraucht, um meinen Fehler zu erkennen. :-(

1
martinp999

In meinem Fall hatte ich UNMET PEER DEPENDENCY [email protected]^3.0.0, das diese Fehlermeldung verursachte, alle anzeigen und fehlende Module erneut mit --save installieren

npm install redux --save
1
Ursu Alexandr

Dieser Fehler kann auftreten, wenn Sie requireing ein Modul verwenden, in dessen Package.json ein main-Feld fehlt oder falsch ist. Obwohl das Modul selbst installiert ist, muss npm/node eine einzige .js-Datei als Eingangspunkt zu Ihrem Modul verwenden. Wenn das Feld main nicht vorhanden ist, sucht es standardmäßig nach index.js im Ordner Ihres Moduls. Wenn die Hauptdatei Ihres Moduls nicht index.js ist, kann es nicht require.

Wird entdeckt, während ein browserify- basiertes Modul in ein CommonJS require- fähiges Modul umgewandelt wird. browserify kümmerte sich nicht um das fehlende main-Feld, und daher war der Fehler nicht bemerkt worden.

1
MrCranky

Bitte installieren Sie die neue CLI v3 (npm install -g ionic @ latest). 

Wenn dieses Problem immer noch ein Problem in CLI v3 ist. Vielen Dank!

0
Limbani Akash

Dieses Problem ist bei der Verwendung vonwebpackmitwebpack-dev-middlewareaufgetreten.

Hatte eine einzelne Datei in einen Ordner verwandelt.

Der Beobachter schien den neuen Ordner nicht zu sehen und das Modul fehlte jetzt.

Behoben durch Neustarten des Prozesses.

0
Chris

Vielleicht haben Sie wie ich "view engine" in express auf eine nicht vorhandene Engine gesetzt oder versucht, eine unregistrierte Templating Engine zu verwenden. Stellen Sie sicher, dass Sie Folgendes verwenden: app.engine('engine name',engine) app.set('view engine','engine name')

0

Ich habe versucht, mein eigenes Paket zu veröffentlichen und es dann in ein anderes Projekt aufzunehmen. Ich hatte dieses Problem, weil ich das erste Modul erstellt habe. Ich verwende den ES2015-Export, um das Modul zu erstellen. Nehmen wir beispielsweise an, das Modul sieht folgendermaßen aus:

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

Nach der Zusammenstellung mit Babel und vor der Veröffentlichung:

'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;
};

Also musste ich nach npm install module-name In einem anderen Projekt (keine ES2015) machen

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

Um das Paket tatsächlich zu importieren.

Ich hoffe, das hilft!

0
Belgor

Wenn das Paket erfolgreich installiert wurde, wechseln Sie in den Ordner node_modules und überprüfen Sie die Datei und den Pfad. Dann importieren. Hoffe das hilft.

0
Nasir Khan

Das Entfernen von node/npm und das erneute Installieren der stabilen (nicht der neuesten) Version hat bei mir funktioniert.

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

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

Ich habe gerade ein ungewöhnliches Szenario gefunden, das für jemanden nützlich sein könnte und eine Art roter Hering ist.

Ich habe auch den Fehler Cannot Find Module bekommen, aber seltsamerweise funktionierte alles perfekt in meiner lokalen (Mac gehosteten) Node.js-Umgebung. Dieses Problem trat nur auf, als der Code auf unserem Linux-Server bereitgestellt wurde.

Nun, es stellte sich als Tippfehler heraus, dass die Installation auf Mac-basierter Node.js-Version (offenbar) sehr gerne ignoriert wurde.

Das Include sah folgendermaßen aus:

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

Die eigentliche Datei hieß jedoch "s3Uploader.class.js".

Beachten Sie den Unterschied zwischen "code" und "s" zwischen dem Code und dem Dateinamen.

Also - in der seltenen Möglichkeit, dass keine der anderen Lösungen hier Ihr Problem löst, sollten Sie dreifach prüfen, ob Sie die Zeichen in Ihrem eingeschlossenen Dateinamen nicht falsch einordnen! :)

und DUH!

0
Genia S.