Heim > Artikel > Web-Frontend > Das Laden von Modulen in Nodejs verstehen
Dieser Artikel stellt Ihnen das Laden des Moduls in nodejs vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Verwandte Empfehlungen: „nodejs Tutorial“
Bei der Verwendung von Nodejs ist es unvermeidlich, auf Module von Drittanbietern zu verweisen (zum Beispiel: http, net...), und einige werden auf npm veröffentlicht (Beispiel: MSSQL, Elasticsearch ...)
Dieser Artikel konzentriert sich auf drei Probleme:
1.
2. Anwendungsstartvorgang.
3. Wie die Anwendung abhängige Module lädt.
1. Modulladevorgang
Nodejs-Module können grob in 4 Typen unterteilt werden:
a) eingebaute Module Module, die in C++-Form in Nodejs bereitgestellt werden.
b) Konstantenmodul Ein Modul, das Konstanten in Nodejs definiert.
c) natives Modul Ein Modul, das in Javascript-Form in Nodejs bereitgestellt wird.
d) Drittanbietermodul Von Drittanbietern bereitgestellte Module.
Sehen wir uns zunächst den Generierungsprozess des integrierten Moduls und des nativen Moduls an.
Die Generierung des nativen JS-Moduls ist relativ kompliziert. Nach der Kompilierung wird eine node_natives.h im Verzeichnis /out/release/obj/gen generiert.
Diese Datei wird von js2c.py generiert. Sie konvertiert alle js-Dateien im lib-Verzeichnis im Nodejs-Quellcode in ASCII-Codes und speichert sie im entsprechenden Array.
Eingebautes C++-Modul Der Generierungsprozess ist relativ einfach. Jeder integrierte C++-Moduleintrag wird durch das Makro NODE_MODULE_CONTEXT_AWARE_BUILTIN in ein statisches void register_tcp_wrap( erweitert. ) Attribut(Konstruktor)-Funktion.
Freunde, die mit GCC vertraut sind, wissen, dass die durch das Attribut (Konstruktor) geänderte Funktion vor der Funktion main() von Nodejs ausgeführt wird. Mit anderen Worten, das integrierte C++-Modul wird vor main() in die Liste modlist_builtin geladen. Funktion, und modlist_builtin ist ein Zeiger vom Typ struct node_module, und get_builtin_module() wird durchlaufen, um das benötigte Modul zu finden.
Tatsächlich wird es letztendlich in eine ausführbare Datei kompiliert, egal ob es sich um ein naives JS-Modul oder ein integriertes C++-Modul handelt. Die Extraktionsmethoden der beiden sind sehr unterschiedlich. Das js-Modul verwendet Process.binding('natives'), während das C++-Modul get_builtin_module() direkt verwendet.
Eine binding()-Funktion wird in node.cc bereitgestellt. Wenn wir require() verwenden, um auf ein anderes Modul zu verweisen, wird die binding()-Funktion eingeführt. Lassen Sie uns diese Funktion analysieren:
Anschaulich ist zu erkennen, dass die Funktion hauptsächlich drei Module bedient: eingebaut, konstant und nativ.
builtin hat die höchste Priorität und wird in modlist_builtin durchsucht. Der Vorgang ist sehr einfach: Durchsuchen Sie einfach die gesamte Liste und finden Sie Module mit demselben Namen. Nachdem es gefunden wurde, wird zuerst die Registrierungsfunktion des Moduls ausgeführt und dann werden die Datenexporte zurückgegeben. Das
Konstantenmodul hat die zweite Priorität und Konstantendefinitionen in Nodejs werden über Konstanten exportiert.
native hat die niedrigste Priorität.
2. Anwendungsstartprozess
Das obige Bild ist ein Flussdiagramm, das test.js als Parameter zum Starten und schließlich zur Ausführung beschreibt. Der gesamte Prozess kann in 4 Schritte unterteilt werden:
1. Ausführbarer Dateiknoten: Knoteneintrag, der hauptsächlich die Rolle der Umgebungsvorbereitung während des Startvorgangs spielt
2.src/node.js: Startskript
3.Native Modul: für Modul Vorbereitung auf die Ausführung von .js
4.module.js: natives Modul, das zum Laden, Kompilieren und Ausführen von Anwendungen verwendet wird
Wie lädt die Anwendung abhängige Module
?Wie bereits erwähnt, ist NativeModule.require() nur dafür verantwortlich, beim Referenzieren nativer Module zu helfen, was für lib/module.js ausreicht.
Aber es ist offensichtlich, dass allgemeine Anwendungen nicht nur auf das Matatives-Modul, sondern auch auf Module von Drittanbietern verweisen müssen. Werfen wir einen Blick auf die Funktion Module.prototype._require() in module.js.
Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmierunterricht! !
Das obige ist der detaillierte Inhalt vonDas Laden von Modulen in Nodejs verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!