856 Stimmen

Wie behebe ich den Fehler "Cannot find module" mit Node.js?

Nachdem ich ein Modul von GitHub heruntergeladen und die Anweisungen zum Erstellen befolgt habe, versuche ich, es in ein bestehendes Projekt zu ziehen:

> npm install ../faye

Das scheint zu klappen:

> npm list
/home/dave/src/server
 faye@0.7.1
   cookiejar@1.3.0
   hiredis@0.1.13
   redis@0.7.1

Aber Node.js kann das Modul 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 soll. Irgendwelche Vorschläge?

675voto

Bill Punkte 24851

Verwendung von npm install installiert das Modul nur in das aktuelle Verzeichnis (in ein Unterverzeichnis namens node_modules ). Befindet sich app.js unter home/dave/src/server/ ? Wenn nicht und Sie das Modul aus einem beliebigen Verzeichnis verwenden wollen, müssen Sie es global installieren, indem Sie npm install -g .

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

Update (8/2019):

Heutzutage können Sie paket-lock.json Datei, die automatisch generiert wird, wenn npm Ihr node_modules-Verzeichnis modifiziert. Daher können Sie das Einchecken von Paketen auslassen, da die package-lock.json verfolgt die genauen Versionen der node_modules, die Sie derzeit verwenden. Zum Installieren von Paketen aus package-lock.json anstelle von package.json Verwenden Sie den Befehl npm ci .

Aktualisierung (3/2016):

Ich habe eine Menge Kritik für meine Antwort erhalten, insbesondere dafür, dass ich die Pakete, von denen mein Code abhängt, einchecke. Vor ein paar Tagen hat jemand alle seine Pakete unveröffentlicht ( https://kodfabrik.com/journal/i-ve-just-liberated-my-modules ), die React, Babel und so ziemlich alles andere zerstört hat. Es ist jetzt hoffentlich klar, dass Sie sich nicht darauf verlassen können, dass NPM Ihre Abhängigkeiten für Sie pflegt, wenn Sie Produktionscode haben.

601voto

Abhinav Singh Punkte 7444

Ich hatte ein sehr ähnliches Problem. Das Entfernen der gesamten node_modules und die Neuinstallation hat bei mir funktioniert:

rm -rf node_modules
npm install

106voto

Piyush Chordia Punkte 1245
npm install --save module_name

Zum Beispiel, wenn der Fehler lautet:

{ [Fehler: Modul '/Root/.npm/form-data' kann nicht gefunden werden] code: 'MODULE_NOT_FOUND' }

dann können Sie dieses Problem lösen, indem Sie den Befehl npm install --save form-data .

49voto

Xakiru Punkte 2121
rm package-lock.json
rm -r node_modules
npm i

Das sollte das Problem beheben und alle Pakete installieren.

42voto

mgthomas99 Punkte 4026

Für TypeScript-Benutzer: Wenn Sie ein eingebautes Node-Modul importieren (z. B. http , path o url ) und Sie erhalten eine Fehlermeldung wie die folgende "Cannot find module "x" dann kann der Fehler behoben werden, indem man

npm install @types/node --save-dev

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X