Heim > Web-Frontend > js-Tutorial > Hauptteil

Das Laden von Modulen in Nodejs verstehen

青灯夜游
Freigeben: 2021-02-01 11:22:43
nach vorne
2989 Leute haben es durchsucht

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.

Das Laden von Modulen in Nodejs verstehen

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.

Das Laden von Modulen in Nodejs verstehen

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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage