RequireJS implementiert die AMD API (Quelle) .
CommonJS ist eine Methode zur Definition von Modulen mit Hilfe eines exports
Objekt, das den Inhalt des Moduls definiert. Einfach ausgedrückt, könnte eine CommonJS-Implementierung so 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 schreibt CommonJS vor, dass Sie eine require()
Funktion zum Abrufen von Abhängigkeiten, eine exports
um den Inhalt des Moduls zu exportieren, und einen Modulbezeichner (der die Position des betreffenden Moduls im Verhältnis zu diesem Modul beschreibt), der verwendet wird, um die Abhängigkeiten ( Quelle ). CommonJS hat verschiedene Implementierungen, darunter Node.js die Sie erwähnt haben.
CommonJS wurde nicht speziell mit Blick auf Browser entwickelt, so dass es sich nicht sehr gut in die Browserumgebung einfügt (*Ich habe wirklich keine Quelle dafür--es steht einfach überall so, einschließlich die RequireJS-Site.* ) Offenbar hat das etwas mit asynchronem Laden usw. zu tun.
Auf der anderen Seite implementiert RequireJS AMD, das auf die Browserumgebung zugeschnitten ist ( Quelle ). Offensichtlich begann AMD als eine Abspaltung des CommonJS Transport-Formats und entwickelte sich zu einer eigenen Moduldefinitions-API. Daraus ergeben sich die Ähnlichkeiten zwischen den beiden. Die neue Funktion in AMD ist die define()
Funktion, die es dem Modul ermöglicht, seine Abhängigkeiten zu deklarieren, bevor es geladen wird. Die Definition könnte zum Beispiel lauten:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
Also, CommonJS und AMD sind JavaScript Moduldefinitions-APIs, die unterschiedlich implementiert sind, aber 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 und gleichzeitig versuchen, den Geist der CommonJS (hauptsächlich in den Modulbezeichnungen).
Um Sie noch mehr zu verwirren, bietet RequireJS, obwohl es eine AMD-Implementierung ist, einen CommonJS-Wrapper, so dass 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"; };
});