RequireJS implementiert die AMD- API (Quelle) .
CommonJS ist eine Möglichkeit, Module mithilfe eines exports
Objekts zu definieren, das den Modulinhalt definiert. Einfach ausgedrückt könnte eine CommonJS-Implementierung folgendermaßen funktionieren:
// someModule.js
exports.doSomething = function() { return "foo"; };
//otherModule.js
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
Grundsätzlich gibt CommonJS an, dass Sie eine require()
Funktion zum Abrufen von Abhängigkeiten, eine exports
Variable zum Exportieren von Modulinhalten und eine Modulkennung (die den Speicherort des betreffenden Moduls in Bezug auf dieses Modul beschreibt) benötigen, mit der die Abhängigkeiten ( Quelle) benötigt werden ). CommonJS verfügt über verschiedene Implementierungen, einschließlich Node.js , die Sie erwähnt haben.
CommonJS wurde nicht speziell für Browser entwickelt, daher passt es nicht sehr gut in die Browserumgebung ( ich habe wirklich keine Quelle dafür - es sagt es einfach überall, einschließlich der RequireJS-Site. ) Anscheinend hat dies etwas zu tun tun mit asynchronem Laden usw.
Andererseits implementiert RequireJS AMD, das für die Browserumgebung ( Quelle ) ausgelegt ist. Anscheinend begann AMD als Spin-off des CommonJS-Transportformats und entwickelte sich zu einer eigenen Moduldefinitions-API. Daher die Ähnlichkeiten zwischen den beiden. Die neue Funktion in AMD ist die define()
Funktion, mit der das Modul seine Abhängigkeiten deklarieren kann, bevor es geladen wird. Zum Beispiel könnte die Definition sein:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
CommonJS und AMD sind also JavaScript- Moduldefinitions-APIs mit unterschiedlichen Implementierungen, die jedoch beide denselben Ursprung haben.
- AMD ist besser für den Browser geeignet, da es das asynchrone Laden von Modulabhängigkeiten unterstützt.
- RequireJS ist eine Implementierung von AMD , während gleichzeitig versucht wird, den Geist von CommonJS beizubehalten (hauptsächlich in den Modulkennungen).
Um Sie noch mehr zu verwirren, bietet RequireJS als AMD-Implementierung einen CommonJS-Wrapper, sodass CommonJS-Module fast direkt zur Verwendung mit RequireJS importiert werden können.
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
Ich hoffe das hilft die Dinge zu klären!