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
└─┬ [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
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 los ist, aber ich bin ein bisschen ratlos, wo ich als nächstes suchen soll. Irgendwelche Vorschläge?
Mit npm install
wird das Modul nur im aktuellen Verzeichnis installiert (in einem Unterverzeichnis namens node_modules
). Befindet sich app.js unter home/dave/src/server/
? Wenn nicht und Sie das Modul von einem beliebigen Verzeichnis aus verwenden wollen, müssen Sie es global mit npm install -g
installieren.
Normalerweise installiere ich die meisten Pakete lokal, so dass sie zusammen mit meinem Projektcode eingecheckt werden.
Update (8/2019):
Heutzutage können Sie die Datei package-lock.json verwenden, die automatisch generiert wird, wenn npm Ihr node_modules-Verzeichnis modifiziert. Somit können Sie sich das Einchecken von Paketen sparen, da die package-lock.json
die genauen Versionen Ihrer node_modules, die Sie gerade verwenden, aufzeichnet. Um Pakete aus package-lock.json
anstelle von package.json
zu installieren, verwenden Sie den Befehl npm ci
.
Update (3/2016):
Ich habe eine Menge Kritik für meine Antwort erhalten, insbesondere dafür, dass ich die Pakete einchecke, von denen mein Code abhängt. Vor ein paar Tagen hat jemand alle seine Pakete veröffentlicht (https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp), was React, Babel und so ziemlich alles andere zerstört hat. Hoffentlich ist jetzt klar, dass man sich bei produktivem Code nicht darauf verlassen kann, dass NPM die Abhängigkeiten tatsächlich für einen pflegt.
Ich hatte ein sehr ähnliches Problem. Das Entfernen des gesamten Ordners "node_modules" und die Neuinstallation haben bei mir funktioniert:
rm -rf node_modules
npm install
Wechseln Sie das Verzeichnis und zeigen Sie auf Ihren aktuellen Projektordner und dann "npm install". .
Dadurch werden alle Abhängigkeiten und Module in Ihrem Projektordner installiert.