Ich versuche, Node unter Mac OSX Lion einzurichten. Es scheint alles in Ordnung zu sein, aber ich kann anscheinend keine Module aus meinem globalen Modulordner importieren. Ich bekomme den Fehler,
Error: Cannot find module <module>
Wenn ich Folgendes ausführe : node -e require.paths
, erhalte ich folgende Antwort:
[ '/usr/local/lib/node_modules',
'/Users/Me/.node_modules',
'/Users/Me/.node_libraries',
'/usr/local/Cellar/node/0.4.12/lib/node' ]
Was richtig ist, meine Module sind tatsächlich in / usr / local / lib / node_modules installiert. Wenn ich jedoch versuche, ein Skript auszuführen, erhalte ich Folgendes:
Error: Cannot find module 'socket.io'
at Function._resolveFilename (module.js:326:11)
at Function._load (module.js:271:25)
at require (module.js:355:19)
at Object.<anonymous> (/Users/Me/node/server.js:2:10)
at Module._compile (module.js:411:26)
at Object..js (module.js:417:10)
at Module.load (module.js:343:31)
at Function._load (module.js:302:12)
at Array.<anonymous> (module.js:430:10)
at EventEmitter._tickCallback (node.js:126:26)
Mein .bash_profile sieht folgendermaßen aus:
export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
Würde mich sehr über Hilfe freuen, ich habe keine Ahnung, warum ich keine Bibliotheken importieren kann.
npm link
können) finden Sie hier: stackoverflow.com/a/15646750/2671392Antworten:
Wenn Sie npm> = 1.0 verwenden, können Sie
npm link <global-package>
einen lokalen Link zu einem bereits global installierten Paket erstellen. ( Vorsichtsmaßnahme: Das Betriebssystem muss Symlinks unterstützen. )Dies ist jedoch nicht ohne Probleme.
Alternativ können Sie die Pakete sowohl lokal als auch global installieren.
Weitere Informationen finden Sie unter
quelle
npm
der Cache (in dem sich der Cache befindet~/.npm
) den Neuinstallationsprozess an Ihren verschiedenen Standorten zweckmäßig macht.Node.js verwendet die Umgebungsvariable
NODE_PATH
, um zusätzliche Verzeichnisse anzugeben, die in den Modul-Suchpfad aufgenommen werden sollen.npm
Mit demnpm root -g
Befehl können Sie selbst angeben, wo globale Module gespeichert sind . Wenn Sie diese beiden zusammenfügen, können Sie mit dem folgenden Befehl sicherstellen, dass globale Module in Ihrem Suchpfad enthalten sind (unter Linux).export NODE_PATH=$(npm root --quiet -g)
quelle
NODE_PATH
Hinweis auf die Umgebungsvariable. Das hat sehr geholfen!NODE_PATH
den entsprechenden Posix-Pfad festlegen, damit npm unter MSYS2 funktioniert. Danke dir..node_modules
Ordner durchsuchbar, aber um Module mit zu importierenrequire()
, sollten sie weiterhin in Ihrem lokalen Projektverzeichnis installiert sein (oder alternativ mit verknüpft werdennpm link
). Globale Module können nicht in Projekte importiert werden, nur Binärdateien / Skripte können von dort ausgeführt werden.Mit dem Link npm können Sie einen symbolischen Link zu Ihrem globalen Paket in Ihrem Projektordner erstellen.
Beispiel:
Es wird lediglich ein lokaler Ordner "node_modules" erstellt und anschließend ein Symlink express -> [globales Verzeichnis] / node_modules / express erstellt, das dann von aufgelöst werden kann
require('express')
quelle
Installieren Sie jedes Paket global wie folgt:
Da dieses Ersetzungsmodul global installiert ist, wird dort, wenn Sie Ihren Knotenmodulordner sehen, das Ersetzungsmodul dort nicht angezeigt, und Sie können dieses Paket nicht mit require ('replace') verwenden.
denn mit require können Sie nur lokale Module verwenden, die in Ihrem Knotenmodulordner vorhanden sind.
Um nun ein globales Modul zu verwenden, sollten Sie es mit dem folgenden Befehl mit dem Pfad des Knotenmoduls verknüpfen.
Gehen Sie jetzt zurück und sehen Sie sich Ihren Knotenmodulordner an. Möglicherweise können Sie dort das Ersatzmodul sehen und es mit require ('replace') in Ihrer Anwendung verwenden, da es mit Ihrem lokalen Knotenmodul verknüpft ist.
Bitte lassen Sie mich wissen, wenn weitere Klarstellungen erforderlich sind.
quelle
Sie können require mit dem Pfad zum globalen Modulverzeichnis als Argument verwenden.
Auf meinem Mac verwende ich Folgendes:
Wie finden Sie heraus, wo sich Ihre globalen Module befinden? -> Wo installiert npm Pakete?
quelle
Festlegen der Umgebungsvariablen NODE_PATH, die auf Ihren globalen
node_modules
Ordner verweist .In Windows 7 oder höher ist der Pfad so ähnlich wie
%AppData%\npm\node_modules
unter UNIX,/home/sg/.npm_global/lib/node_modules/
aber er hängt von der Benutzerkonfiguration ab.Der Befehl
npm config get prefix
kann helfen, herauszufinden, welcher Pfad der richtige ist.In UNIX-Systemen können Sie dies mit dem folgenden Befehl ausführen:
quelle
Ich benutze Docker. Ich versuche, ein Docker-Image zu erstellen, in dem alle meine Knotenabhängigkeiten installiert sind, das jedoch zur Laufzeit des Containers mein lokales App-Verzeichnis verwenden kann (ohne es mit einem node_modules-Verzeichnis oder -Link zu verschmutzen). Dies führt in diesem Szenario zu Problemen. Meine Problemumgehung besteht darin, von dem genauen Pfad aus zu verlangen, in dem sich das Modul befindet, z. B. ('/ usr / local / lib / node_modules / socket.io').
quelle
require.paths
ist veraltet.Gehen Sie zu Ihrem Projektordner und geben Sie ein
Das sollte es im lokalen Ordner ./node_modules installieren, in dem der Knoten danach sucht.
Ich behalte meine Sachen so:
Erstellen Sie eine app.js-Datei
Jetzt starte meine App
Stellen Sie sicher, dass Sie
npm >= 1.0
und verwendennode >= 4.0
.quelle