JavaScript模塊化編程 - CommonJS, AMD ,CMD和 RequireJS之間的關(guān)系

     CommonJs是一個(gè)組織,它定了一個(gè)Modules規(guī)范,用來(lái)解決JS沒(méi)有模塊(js文件)化管理代碼的功能育灸。

關(guān)鍵部分是require - 引入依賴;export - 導(dǎo)出模塊這兩個(gè)函數(shù)昵宇。然而這個(gè)Modules規(guī)范當(dāng)初是為服務(wù)器端設(shè)計(jì)的磅崭,是一個(gè)同步模式,這種模式并不適合瀏覽器端瓦哎,因?yàn)闉g覽器同步模式一個(gè)一個(gè)加載模塊會(huì)變得打開(kāi)非常的慢砸喻。所以,這時(shí)候AMD就是為了解決這個(gè)問(wèn)題而產(chǎn)生的蒋譬,它最大的特點(diǎn)就是可以異步加載模塊割岛,具體不同在于AMD有一個(gè)define函數(shù),他可以讓當(dāng)前模塊運(yùn)行時(shí)先加載當(dāng)前模塊所需要的模塊犯助。
而RequireJs就是AMD現(xiàn)在用的最廣泛癣漆,最流行的實(shí)現(xiàn)。所以這三者之間的關(guān)系可以這樣理解:CommonJs(泛指Modules規(guī)范)和AMD都是為了解決JS模塊化的規(guī)范API剂买,CommonJs更適合于服務(wù)器端惠爽,而AMD基本就是用于瀏覽器端(不過(guò)也可以用于服務(wù)器端,比如Node loader方向)瞬哼,而RequireJs就是AMD最流行的實(shí)現(xiàn)婚肆。
而CMD則是國(guó)內(nèi)玉伯大神在開(kāi)發(fā)SeaJs的時(shí)候提出來(lái)的,屬于CommonJs的一種規(guī)范
AMD:RequireJs
CMD : SeaJs
CMD和AMD都是CommonJs的一種規(guī)范的實(shí)現(xiàn)主義倒槐,SeaJs和RequireJs就是對(duì)應(yīng)的實(shí)踐旬痹。說(shuō)白了就是CMD和AMD是理論,SeaJs和RequireJs是對(duì)應(yīng)的產(chǎn)物。

CMD和AMD的區(qū)別:CMD相當(dāng)于按需加載两残,定義一個(gè)模塊的時(shí)候不需要立即制定依賴模塊永毅,在需要的時(shí)候require就可以了(同步的),比較方便人弓;而AMD則相反沼死,定義模塊的時(shí)候需要制定依賴模塊,并以形參的方式引入factory中崔赌。

區(qū)別看下邊例子:
//AMD
define(['dep1','dep2'],function(dep1,dep2){
//內(nèi)部只能使用制定的模塊
return function(){};
});
//CMD
define(function(require,exports,module){
//此處如果需要某XX模塊意蛀,可以引入
var xx=require('XX');
});

AMD規(guī)范后來(lái)也允許輸出的模塊兼容CommonJs規(guī)范(同步),這時(shí)define方法需要寫(xiě)成下面這樣:
define(function (require, exports, module){
var someModule = require("someModule");
var anotherModule = require("anotherModule");

someModule.doTehAwesome();
anotherModule.doMoarAwesome();

exports.asplode = function (){
someModule.doTehAwesome();
anotherModule.doMoarAwesome();
};});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末健芭,一起剝皮案震驚了整個(gè)濱河市县钥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慈迈,老刑警劉巖若贮,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異痒留,居然都是意外死亡谴麦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伸头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)匾效,“玉大人,你說(shuō)我怎么就攤上這事恤磷∶婧撸” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵扫步,是天一觀的道長(zhǎng)精绎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锌妻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任旬牲,我火速辦了婚禮仿粹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘原茅。我一直安慰自己吭历,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布擂橘。 她就那樣靜靜地躺著晌区,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朗若,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天恼五,我揣著相機(jī)與錄音,去河邊找鬼哭懈。 笑死灾馒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遣总。 我是一名探鬼主播睬罗,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旭斥!你這毒婦竟也來(lái)了容达?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤垂券,失蹤者是張志新(化名)和其女友劉穎花盐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體圆米,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卒暂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娄帖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片也祠。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖近速,靈堂內(nèi)的尸體忽然破棺而出诈嘿,到底是詐尸還是另有隱情,我是刑警寧澤削葱,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布奖亚,位于F島的核電站,受9級(jí)特大地震影響析砸,放射性物質(zhì)發(fā)生泄漏昔字。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一首繁、第九天 我趴在偏房一處隱蔽的房頂上張望作郭。 院中可真熱鬧,春花似錦弦疮、人聲如沸夹攒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咏尝。三九已至压语,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間编检,已是汗流浹背胎食。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒙谓,地道東北人斥季。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像累驮,于是被迫代替她去往敵國(guó)和親酣倾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容