CommonJS、AMD和RequireJS、NodeJS之間的關係

RequireJS實現了AMD的API.

CommonJS是使用exports對象來定義模塊的一種方法,它定義了模塊的內容。簡單地實現一個CommonJS的定義就像以下這樣:

// 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"; };

基本上CommonJS明白了你須要有一個require函數來獲取依賴,exports變量來輸出模塊的內容和一些用來獲取依賴的模塊標識符。

CommonJS有多種實現。比方Node.js.

由於CommonJS設計的時候沒有考慮瀏覽器,所以它不適合瀏覽器環境(我事實上對這個不明白,可是這樣的說法到處都有,比方RequireJS官網)。所以我們得做一些工作來實現異步載入。

 

相反,RequireJS實現了AMD。它被設計用來適應瀏覽器環境。表面上看來,AMD開始是CommonJS輸出格式的副產品,並且終於進化出了自己的API。

在AMD中出現的新東西是define函數。它同意模塊在載入依賴之前聲明它的依賴。比如定義可能就像以下這樣:

define('module/id/string', ['module', 'dependency', 'array'], 

function(module, factory function) {

return ModuleContents;  

});

因此CommonJS和AMD是Javascript模塊定義API的不同的實現。可是他們有同樣的根源。AMD更適合瀏覽器,由於它支持異步載入模塊依賴。RequireJS是AMD的一個實現,並且儘量保留了CommonJS的精神(主要是模塊標識符上)。

更讓人混亂的是,RequireJS在實現AMD的同一時候,還提供了一個CommonJS包裹,這樣CommonJS模塊能夠差點兒直接被RequireJS引入。

define(function(require, exports, module) {

    var someModule = require('someModule'); // in the vein of node    

    exports.doSomethingElse = function() { return       someModule.doSomething() + "bar"; };

});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章