徹底搞清CommonJS拉队、AMD、CMD...

發(fā)展過程

CommonJS吉捶、AMD皆尔、CMD、requeir珊拼, moudle.exports流炕, exports,import剑辫,export...原地爆炸...

先從時(shí)間線上大概對(duì)這幾種規(guī)范有個(gè)大致了解

  • 2009 -> CommonJS
  • 2010 -> AMD規(guī)范
  • 2011 -> CMD規(guī)范
  • 2015 -> ES6 Module

CommonJS

CommonJS規(guī)范誕生比較早渠欺,Mozilla工程師Kevin Dangoo在2009年發(fā)起,它出現(xiàn)的目的是希望JS可以運(yùn)行到更多地方胳岂,主要是服務(wù)端舔稀,前期的nodejs采用了這種規(guī)范。

用法示例

module.exports或exports負(fù)責(zé)對(duì)外暴漏數(shù)據(jù)产园,require來引入

<!--a.js-->
module.exports = {
    name: '四大名將'
}
<!--也可以用exports導(dǎo)出-->
<!--export.name = '四大名將'-->

<!--b.js-->
const res = require('./a.js')
console.log(res.name) // 四大名將
module.exports 和 exports的區(qū)別

乍一看,還以為CommonJS提供了兩種方法來導(dǎo)出數(shù)據(jù)断箫,其實(shí)不然秋冰,require并不認(rèn)識(shí)exports剑勾,之所以它也好使,那是因?yàn)槟K內(nèi)部這些代碼的作用虽另。

var module = {
    exports: {
        <!--導(dǎo)出的內(nèi)容-->
    }
}

var exports = module.exports
return module.exports

require方能看到的只有module.exports這個(gè)對(duì)象捂刺,它是看不到exports這個(gè)對(duì)象的,而我們?cè)诰帉懩K時(shí)用到的exports實(shí)際上是對(duì)module.exports的引用森缠。

舉個(gè)例子
<!--a.js-->
exports = {
    name: '四大名將'
}
如果這樣導(dǎo)出仪缸,exports被重新賦值,指向的地址便不再是module.exports宾茂,所以此時(shí)的exports失去了它的導(dǎo)出功能拴还,只會(huì)導(dǎo)出一個(gè)默認(rèn)空對(duì)象

AMD (Asynchronous Module Definition)

AMD規(guī)范在2010由requireJS提出,CommonJS規(guī)范主要是彌補(bǔ)服務(wù)端的模塊化機(jī)制坟奥,不像服務(wù)器加載速度很快拇厢,客戶端加載時(shí)需要等待晒喷,可能存在假死情況凉敲,鑒于瀏覽器的特殊情況寺旺,AMD規(guī)范出來了势决,它采用異步方式加載模塊定義的所有依賴,在依賴加載完成后再執(zhí)行回調(diào)函數(shù)陈莽。

define([module-name?], [dependencies?], [factory])

  • module-name:字符串虽抄,模塊名稱(可選)
  • dependencies:要載入的依賴模塊(可選),數(shù)組格式私植,相對(duì)路徑
  • factory: 工廠方法车酣,返回一個(gè)模塊函數(shù)
<!-- 定義模塊 -->
<!-- AMD中require的模塊會(huì)先加載完成 依賴前置 提前執(zhí)行 -->
define('module', ['dep1', 'dep2'], function(dep1, dep2){
  function foo(){
      dep1.doSomething();
      dep2.doSomething();
  }
  return {
    foo : foo
  };
})

<!-- 數(shù)組中聲明需要加載的模塊湖员,可以是模塊名、js文件路徑 -->
<!-- 兩個(gè)參數(shù):加載的模塊清女,加載成功后的回調(diào)函數(shù) -->
require(['module'], function(module){
    module.foo()
});

CMD (Common Module Definition)

CMD規(guī)范在2011年由seaJS提出晰筛,CMD規(guī)范和AMD規(guī)范類似,主要區(qū)別是CMD規(guī)范是就近加載依賴曙博,延遲執(zhí)行怜瞒,只有到require時(shí)依賴才執(zhí)行。

<!-- a.js -->
define(function(require, exports, module) {
  function foo(){
    <!-- require的模塊此時(shí)才會(huì)執(zhí)行 依賴就近 延遲執(zhí)行 而AMD中依賴是前置的 一開始就全都執(zhí)行完畢了  -->
    var dep1 = require('dep1') 
    dep1.doSomething();
 }
 <!--暴漏給外部調(diào)用-->
 exports.foo = foo
 
 /** return或者exports都行
 return {
   foo : foo
 };
 **/
});
<!-- b.js -->
seajs.use("./a", function(a){
  a.foo()
});

ES6 Module

2015年es6橫空出世惠窄,引入了新特性 ES Module漾橙,諸如export, import等命令霜运。

es6的module比較常用蒋腮,貼一個(gè)阮一峰的es6鏈接ES6 Module


最后藕各,圣誕快樂~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末激况,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宦棺,更是在濱河造成了極大的恐慌黔帕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐芥,死亡現(xiàn)場(chǎng)離奇詭異思瘟,居然都是意外死亡闻伶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門光绕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诞帐,“玉大人爆雹,你說我怎么就攤上這事「铺” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)拴孤,這世上最難降的妖魔是什么演熟? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任芒粹,我火速辦了婚禮,結(jié)果婚禮上化漆,老公的妹妹穿的比我還像新娘。我一直安慰自己疙赠,他們只是感情好朦拖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布圃阳。 她就那樣靜靜地躺著,像睡著了一般璧帝。 火紅的嫁衣襯著肌膚如雪捍岳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天睬隶,我揣著相機(jī)與錄音锣夹,去河邊找鬼。 笑死理疙,一個(gè)胖子當(dāng)著我的面吹牛晕城,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窖贤,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赃梧!你這毒婦竟也來了滤蝠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤授嘀,失蹤者是張志新(化名)和其女友劉穎物咳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹄皱,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡览闰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年芯肤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片压鉴。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崖咨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出油吭,到底是詐尸還是另有隱情击蹲,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布婉宰,位于F島的核電站歌豺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏心包。R本人自食惡果不足惜类咧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谴咸。 院中可真熱鬧轮听,春花似錦、人聲如沸岭佳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)珊随。三九已至述寡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叶洞,已是汗流浹背鲫凶。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衩辟,地道東北人螟炫。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像艺晴,于是被迫代替她去往敵國(guó)和親昼钻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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