Bei der Entwicklung komplexer Webanwendungen ist es normalerweise erforderlich, jede Funktion aufzuteilen, in verschiedene Dateien zu kapseln und bei Bedarf auf die Datei zu verweisen, d. h. eine modulare Codeverwaltung. Fast alle Programmiersprachen verfügen über eigene Modulorganisationsmethoden, z. B. Pakete in Java und Assemblys in C#, und Node übernimmt die CommonJS-Modulspezifikation.
Modulspezifikation
CommonJS zielt darauf ab, JS zu standardisieren, das außerhalb des Browsers ausgeführt wird, und hat eine große Anzahl von JS-Problemen gelöst (z wie globale Namenskonflikte). In der CommonJS-Implementierung von Node wird jedes Modul in einer separaten JS-Datei gekapselt, d. h. eine Datei ist ein Modul und der Dateipfad ist der Modulname. Beim Schreiben jedes Moduls stehen die folgenden drei vordefinierten Variablen zur Verfügung:
require()
Diese Funktion wird verwendet, um andere Module im zu laden und zu verwenden Aktuelles Modul, übergeben Sie einen Modulnamen und geben Sie ein Modulexportobjekt zurück. Der Modulname kann einen relativen Pfad (beginnend mit ./) oder einen absoluten Pfad (beginnend mit / oder einem Laufwerksbuchstaben wie C:) verwenden. Außerdem kann die Erweiterung .js im Modulnamen weggelassen werden. Zu diesem Zeitpunkt sucht Node nach einem Ordner mit demselben Namen. Wenn er nicht gefunden wird, sucht er nach einer JS-Datei mit demselben Namen. Sie können diese Funktion auch zum Laden und Verwenden einer JSON-Datei verwenden, die Erweiterung .json darf jedoch nicht weggelassen werden.
exports
Dieses Objekt ist das Exportobjekt des aktuellen Moduls und wird zum Exportieren der öffentlichen Methoden und Eigenschaften des Moduls verwendet. Standardmäßig ist es ein leeres Objekt {}. Wenn andere Module das aktuelle Modul über die Funktion require() verwenden, erhalten sie das Exportobjekt des aktuellen Moduls. Eine öffentliche Methode wird im folgenden Code exportiert:
exports.hello = function() { console.log("Hello World!"); };
module
Dieses Objekt wird zur Bereitstellung verwendet die Metadaten des aktuellen Moduls und andere verwandte Informationen, aber am nützlichsten ist es, das Export-Attribut des aktuellen Moduls durch die Verwendung seines Export-Attributs zu ersetzen. Beispielsweise ist das Modulexportobjekt standardmäßig ein normales Objekt. Sie können es mit der folgenden Methode in eine Funktion umwandeln:
module.exports = function() { console.log("Hello World!"); };
Hinweis: Bei Verwendung von Die obige Methode exportiert das Objekt. Alle Änderungen an werden ignoriert!
Modulinitialisierung
Der JS-Code in einem Modul wird nur einmal ausgeführt, wenn das Modul zum ersten Mal verwendet wird, und wird dabei initialisiert Ausführung Das exportierte Objekt des Moduls. Später wird das zwischengespeicherte Exportobjekt wiederverwendet.
Definieren Sie ein Modul in test.js
//定义私有变量 var name = ""; function setName(n) { name = n; } function logName() { console.log(name); } //导出公有方法 exports.setName = setName; exports.logName = logName;
Laden Sie das Testmodul im Hauptmodul
//加载test模块 var test1 = require("./test.js"), test2 = require("./test.js"); //使用test1 test1.setName("Neo"); //使用test2 test2.logName(); //Neo
Es ist ersichtlich, dass unabhängig davon, wie oft require() aufgerufen wird, dasselbe Modul nur einmal geladen wird und dieselbe Instanz durch mehrmaliges Referenzieren erhalten wird.
Hauptmodul
Das Modul, das über Befehlszeilenparameter zum Starten des Programms an Node übergeben wird, wird als Hauptmodul bezeichnet. Das Hauptmodul ist verantwortlich für die Planung und Erstellung der gesamten Anwendung. Andere Module des Programms arbeiten zusammen. Wenn Sie das Programm beispielsweise über die folgende Befehlszeile starten, ist main.js das Hauptmodul:
$ node main.js
Binärmodul
Neben der Verwendung von JS zum Schreiben von Modulen unterstützt Node auch die Verwendung von C/C++ zum Schreiben von Binärmodulen. Die kompilierten Binärmodule können auf die gleiche Weise wie JS-Module verwendet werden, mit der Ausnahme, dass die Dateierweiterung lautet .Knoten. Obwohl Binärmodule alle vom Betriebssystem bereitgestellten Funktionen nutzen können, ist ihre plattformübergreifende Nutzung schwierig.
Verwandte Empfehlungen:
Detaillierte Erläuterung der Modulsyntax in JavaScript ES6
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Knotenmodulmoduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!