RequireJS implémente l'API AMD (source).
CommonJS est une façon de définir des modules à l'aide d'un exports
objet, qui définit le module de contenu. Mettez simplement un CommonJS la mise en œuvre pourrait fonctionner comme ça
// 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"; };
Fondamentalement CommonJS indique que vous avez besoin d'avoir l' require
-fonction pour récupérer les dépendances, l' exports
variable de module d'exportation des matières et certains identificateur de module (qui décrit l'emplacement du module en question par rapport à ce module qui est utilisé pour obliger les dépendances. (source) CommonJS a implémentations différentes, par exemple Node.js que vous avez mentionné.
Parce que CommonJS n'était pas particulièrement conçus avec les navigateurs à l'esprit, il n'entrait pas dans le navigateur de l'environnement si bien (je n'ai pas vraiment de source pour ce faire, il a juste dit partout, par exemple le RequireJS site.). Apparemment, cela a quelque chose à voir avec le chargement asynchrone, etc.
Au contraire, RequireJS implémente AMD, qui est conçu pour s'adapter à l'environnement du navigateur. (source) Apparemment, AMD a commencé comme un offspin de CommonJs format de Transport et évolué dans sa propre définition de module API. D'où les ressemblances entre les deux. La nouvelle chose dans la DMLA est l' define
-fonction qui permet au module de déclarer ses dépendances avant d'être chargé. Par exemple, la définition pourrait être:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
Donc CommonJS et AMD sont Javascript de définition de module Api qui ont implémentations différentes, mais tous deux viennent de la même origine. AMD est plus adapté pour le navigateur, car il prend en charge le chargement asynchrone des dépendances de modules. RequireJS est une mise en œuvre de la DMLA, alors que dans le même temps, en essayant de garder l'esprit de CommonJS (notamment dans le module identifiants). De vous embrouiller encore plus, RequireJs, tout en étant un AMD mise en œuvre, offre un CommonJS wrapper de sorte CommonJS modules peuvent presque être directement importés dans l'utilisation avec RequireJS.
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
Espérons que cela a aidé à clarifier les choses!