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?

1voto

xpagesbeast Punkte 746

In meinem Fall,

npm install -D tslib @types/node

löste mein Problem, ich konnte dann die

ts-node index.ts

erfolgreich.

0voto

Belgor Punkte 181

Ich habe versucht, mein eigenes Paket zu veröffentlichen und es dann in ein anderes Projekt einzubinden. Ich hatte dieses Problem aufgrund der Art und Weise, wie ich das erste Modul erstellt habe. Ich verwende ES2015 Export, um das Modul zu erstellen, z.B. sieht das Modul so aus:

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

Nachdem sie mit Babel zusammengestellt und zuvor veröffentlicht wurde:

'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 nach npm install module-name In einem anderen Projekt (kein ES2015) musste ich Folgendes tun

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

Um das Paket tatsächlich zu importieren.

Ich hoffe, das hilft!

0voto

majestzim Punkte 508

Ich bin auf dieses Problem gestoßen, als ich die Node-Version zusammen mit der Installation mehrerer verschiedener Paketversionen aktualisiert habe. Das Projekt erstellt ein Docker-Image/Container zum Arbeiten.

Das Problem war, dass das Docker-Image nicht neu erstellt wurde, als ich ein Paket hinzufügte und das Projekt neu erstellte. Die richtigen Informationen befanden sich in meinen lokalen Dateien package.json und package-lock.json.

Das Löschen der Docker-Image und nicht nur der Container hat mein Problem gelöst.

0voto

DerpyNerd Punkte 4432

Nach dieser Frage zu urteilen, gibt es offenbar sehr viele mögliche Ursachen.

Vielleicht hilft das jemandem, und ich hoffe, dass niemand so dumm war wie ich, diese Technik anzuwenden:

Prüfen Sie, ob Sie eine Knoten_Module Ordner auf den Ordnerbaum.

Szenario 1 : Wenn Sie jemals einen Projektordner hatten, in dem Sie einen node_modules-Ordner für mehrere Projekte freigegeben haben, hatten Sie vielleicht keine Probleme

|- projects
| |- node_modules     <- OK
| |- project1         <- No node_modules folder
| | |- package.json
| |- project2         <- No node_modules folder
| | |- package.json

Szenario 2 : Wenn Sie ein drittes, anders geartetes Projekt hinzufügen, können Sie sich dafür entscheiden, ein Knoten_Module Ordner in diesem Projekt:

|- projects
| |- node_modules     <- Can be used by project 3
| |- project1         <- No node_modules folder
| | |- package.json
| |- project2         <- No node_modules folder
| | |- package.json
| |- project3
| | |- node_modules   <- Packages for project 3 only
| | |- package.json

Ich vermute, dass einige Pakete in Projekt 3's node-modules Ordner auf Pakete angewiesen sind, die er in den übergeordneten Ordnern findet (oder nicht findet) Knoten_Module Ordner. Auch wenn man erwarten würde, dass die Abhängigkeiten im Ordner von Projekt 3 zu finden sind Knoten_Module Ordner. Vielleicht liegt es an der Art und Weise, wie einige Pakete importiert und referenziert werden?

Es versteht sich von selbst, dass das eine Katastrophe ist, die nur darauf wartet zu passieren :)

0voto

skygate Punkte 351

Ein seltener, aber ebenfalls möglicher Fall ist ein Tippfehler im Modulnamen. Ich habe das "s" im Dateinamen beim Ausführen von node .\util.js , wo sie sein sollte node.\utils.js und habe unter all den Antworten zu dieser Frage keine Lösung gefunden, bis ich herausfand, dass ich die Datei nicht ausführen kann, selbst wenn ich alles lösche!

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