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?
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.
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
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.
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.
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.
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.
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.
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.
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.
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!
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
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!
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. :-(
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
Dieser Fehler kann auftreten, wenn Sie require
ing 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.
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!
Dieses Problem ist bei der Verwendung vonwebpack
mitwebpack-dev-middleware
aufgetreten.
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.
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')
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!
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.
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/
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!