CommonJS規(guī)范與AMD/CMD規(guī)范總結(jié)

  • CommonJS規(guī)范加載模塊是同步的取劫,只有加載完成,才能執(zhí)行后面的操作忌卤。
  • AMD規(guī)范是非同步加載模塊扫夜,允許指定回調(diào)函數(shù)。
    由于Node.js主要用于服務(wù)器編程驰徊,模塊文件一般都已經(jīng)存在于本地硬盤笤闯,所以加載起來比較快,不用考慮非同步加載的方式棍厂,所以CommonJS規(guī)范比較適用颗味。但是,如果是瀏覽器環(huán)境勋桶,要從服務(wù)器端加載模塊脱衙,這時就必須采用非同步模式侥猬,因此瀏覽器端一般采用AMD規(guī)范。

CommonJS規(guī)范中的module捐韩、exportsrequire

  • 每個文件就是一個模塊退唠,有自己的作用域。每個模塊內(nèi)部荤胁,module變量代表當(dāng)前模塊瞧预,是一個對象,它的exports屬性(即module.exports)是對外的接口仅政。
  • module.exports屬性表示當(dāng)前模塊對外輸出的接口垢油,其他文件加載該模塊,實(shí)際上就是讀取module.exports變量圆丹。
  • 為了方便滩愁,Node為每個模塊提供一個exports變量,指向module.exports辫封。
     let exports = module.exports;
    
  • require命令用于加載模塊文件硝枉。

使用示例:

  //name.js
  exports.name = function(){return '李婷婷'}; //導(dǎo)出
  //getName.js
  let getName = require('name'); //引入

注:不能直接將exports變量指向一個值,因?yàn)檫@樣等于切斷了exportsmodule.exports的聯(lián)系:如下

  exports = function(x){console.log(x)}

如果一個模塊的對外接口倦微,就是一個單一的值妻味,不能使用exports輸出,只能使用module.exports輸出欣福。

AMD/CMD規(guī)范

  • AMDRequireJS在推廣過程中對模塊定義的規(guī)范化產(chǎn)出责球。
    CMDSeaJS在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。
  • 對于依賴的模塊拓劝,AMD是提前執(zhí)行雏逾,CMD是延遲執(zhí)行。不過 RequireJS2.0開始凿将,也改成可以延遲執(zhí)行(根據(jù)寫法不同校套,處理方式不同)。CMD 推崇as lazy as possible.
  • CMD推崇依賴就近牧抵,AMD推崇依賴前置笛匙。
//CMD
define(function(require, exports, module) {   
   let a = require('./a'); 
   a.doSomething();
   ···
   let b = require('./b'); // 依賴可以就近書寫   
   b.doSomething();
   ... 
})

// AMD 默認(rèn)推薦的是
define(['./a', './b'], function(a, b) { 
  // 依賴必須一開始就寫好    
  a.doSomething()   
  ...
  b.doSomething()   
  ...
}) 

雖然AMD也支持CMD的寫法,同時還支持將require作為依賴項(xiàng)傳遞犀变,但RequireJS的作者默認(rèn)是最喜歡上面的寫法妹孙,也是官方文檔里默認(rèn)的模塊定義寫法。

  • AMDAPI默認(rèn)是一個當(dāng)多個用获枝,CMDAPI嚴(yán)格區(qū)分蠢正,推崇職責(zé)單一。
    比如AMD里省店,require分全局require和局部require嚣崭,都叫 require笨触。CMD里,沒有全局require雹舀,而是根據(jù)模塊系統(tǒng)的完備性芦劣,提供seajs.use來實(shí)現(xiàn)模塊系統(tǒng)的加載啟動。CMD里说榆,每個API都簡單純粹虚吟。

拓展
目前所有的引擎都還沒有實(shí)現(xiàn)import,在node中使用babel支持ES6签财,也僅僅是將ES6轉(zhuǎn)碼為ES5再執(zhí)行串慰,import語法會被轉(zhuǎn)碼為require。這也是為什么在模塊導(dǎo)出時使用module.exports唱蒸,在引入模塊時使用import仍然起效邦鲫,因?yàn)楸举|(zhì)上,import會被轉(zhuǎn)碼為require去執(zhí)行神汹。

參考文檔
CommonJS規(guī)范
AMD 和 CMD 的區(qū)別有哪些掂碱?
Node中沒搞明白require和import,你會被坑的很慘

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慎冤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沧卢,更是在濱河造成了極大的恐慌蚁堤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但狭,死亡現(xiàn)場離奇詭異披诗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)立磁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門呈队,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唱歧,你說我怎么就攤上這事宪摧。” “怎么了颅崩?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵几于,是天一觀的道長。 經(jīng)常有香客問我沿后,道長沿彭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任尖滚,我火速辦了婚禮喉刘,結(jié)果婚禮上瞧柔,老公的妹妹穿的比我還像新娘。我一直安慰自己睦裳,他們只是感情好造锅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著推沸,像睡著了一般备绽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鬓催,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天肺素,我揣著相機(jī)與錄音,去河邊找鬼宇驾。 笑死倍靡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的课舍。 我是一名探鬼主播塌西,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筝尾!你這毒婦竟也來了捡需?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤筹淫,失蹤者是張志新(化名)和其女友劉穎站辉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體损姜,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饰剥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摧阅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汰蓉。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棒卷,靈堂內(nèi)的尸體忽然破棺而出顾孽,到底是詐尸還是另有隱情,我是刑警寧澤比规,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布岩齿,位于F島的核電站,受9級特大地震影響苞俘,放射性物質(zhì)發(fā)生泄漏盹沈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乞封。 院中可真熱鬧做裙,春花似錦、人聲如沸肃晚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽关串。三九已至拧廊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晋修,已是汗流浹背吧碾。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墓卦,地道東北人倦春。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像落剪,于是被迫代替她去往敵國和親睁本。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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