Heim >Web-Frontend >js-Tutorial >Lernen Sie die Modulspezifikationen von Knoten (1) von 0 bis 1 kennen
Bevor wir die Konzepte von CommonJS, AMD und CMD erklären, verstehen wir zunächst die Modularität von js. Modularisierung besteht, wie der Name schon sagt, darin, das Projekt nach Funktionen oder anderer Logik zu zerlegen. Jeder Teil verarbeitet nur eine Funktion, um die Funktionen zu entkoppeln und die zukünftige Entwicklung und Wartung zu erleichtern. Dann muss die Modularisierung über die folgenden Funktionen zum Teilen und Zusammensetzen von Modulen verfügen:
Definieren Sie gekapselte Module;
Definieren Sie die Abhängigkeit des neuen Moduls auf anderen Modulen;
kann die Einführung anderer Module unterstützen
Dann wird eine Reihe von Spezifikationen benötigt Um diese Fähigkeiten zu definieren, erschienen CommonJS, AMD, CMD usw.
CommonJS hieß ursprünglich ServerJS
, was die Spezifikation von js auf der Serverseite ist. Gemäß der CommonJS-Spezifikation ist eine einzelne Datei ein Modul, require
wird zum Laden eines Moduls verwendet und exports
wird verwendet, um Methoden oder Eigenschaften im Modul nach außen zugänglich zu machen.
Zum Beispiel:
// hello.jsfunction say(username){ console.log( 'hello, '+username );
}
exports.say = say;
=============
// main.jsvar person = require('./hello');
person.say('wenzi'); // hello, wenziperson.say('师少兵'); // hello, 师少兵person.say('NUC'); // hello, NUC
Gleichzeitig kann die require
-Anweisung an einer beliebigen Stelle in der Datei geschrieben werden, solange sie vor der Referenz verwendet wird, muss sie nicht am Anfang der Datei geschrieben werden. Um den Code jedoch leichter lesbar zu machen und intuitiv zu erkennen, auf welche Module derzeit verwiesen wird, platzieren Sie ihn am besten an den Anfang der Datei.
Einige Leute haben möglicherweise gesehen, dass Exporte direkt verwendet werden, andere wiederum, dass sie module.exports verwenden. Hier ist eine kurze Erklärung des Unterschieds zwischen den beiden.
Nehmen wir ein einfaches Beispiel:
var a = {name:'wenzi'};var b = a;console.log(a); // {name: "wenzi"}console.log(b); // {name: "wenzi"}
Die Ausgabeergebnisse von a und b sind gleich. Jetzt ändere ich den Wert von name in b:
b.name = 'shaobing';console.log(a); // {name: "shaobing"}console.log(b); // {name: "shaobing"}
Die Ausgabeergebnisse von a und b haben sich geändert. Ich deklariere b neu:
var b = {name:'师少兵'};console.log(a); // {name: "shaobing"}console.log(b); // {name: "师少兵"}
Diese drei Beispiele geben drei Ergebnisse aus:
deklariere ein Objekt und weise a zu b zu, und dann a und b geben das gleiche Ergebnis aus;
ändert den Namen in b, dann ändert sich auch der Name in a
: a ist ein Objekt, b ist Die Referenz auf a, also auf a und b in den gleichen Speicher, daher ist die Ausgabe in 1 gleich. Wenn b geändert wird, dh der Inhalt von a und b, die auf dieselbe Speicheradresse zeigen, geändert wurde, wird auch a widergespiegelt, sodass die Ausgabe des zweiten Beispiels dieselbe ist. Wenn b überschrieben wird, zeigt b auf einen neuen Speicher und a zeigt immer noch auf den ursprünglichen Speicher, sodass die endgültige Ausgabe anders ausfällt. Dann können Sie zu diesem Zeitpunkt
und einführen: exports
module.exports
2. AMD und RequireJS
RequireJS
In der AMD-Spezifikation lautet das standardmäßig empfohlene Modulformat:
// hello.js// 将需要引入的模块全部写入到数组中,然后传递参数进行调用define(['a', 'b'], function(a, ,b){ // do something return{
hello : function(username){ console.log( 'hello, '+username );
}
}
})
==========// main.jsdefine(['./hello'], function(h){
h.hello('wenzi');
})
Mit anderen Worten, in AMD müssen Module mit define
3. CMD und Seajs
. SeaJS verwendet die CMD-Spezifikation: 就近依赖
require
Sie können den Unterschied zwischen AMD und CMD auch hier sehen:
AMD muss normalerweise alle Abhängigkeiten auf einmal einführen und sie dann über Parameter weitergeben, während CMD sie nur bei Bedarf einführt
AMD unterstützt jedoch auch Importformate wie CMD, die interne Ausführung basiert jedoch weiterhin auf der Logik von AMD.
In diesem Artikel werden die relevanten Unterschiede und Zusammenhänge zwischen CommonJS-, AMD- und CMD-Spezifikationen vorgestellt:
CommonJS: Jede Datei ist ein Modul und muss nicht definiert werden.
AMD: Verwenden Sie define, um ein Modul zu definieren und darauf zu achten im Voraus;
in der Nähe abhängig zu sein