前后端模塊規(guī)范有哪些重斑?

? ? ? ? 模塊化思想在前端的應(yīng)用層出不窮,它的出現(xiàn)也加快了前端內(nèi)容的開發(fā)祖很,和下部的復(fù)用漾脂,同時(shí)增加了合作性。做到模塊化骨稿,就要有一定的模塊規(guī)范, CommonJS為后端定制了特定的規(guī)范形耗,但是鑒于網(wǎng)絡(luò)的原因辙浑,CommonJS并不完全適合前端的應(yīng)用場(chǎng)景,經(jīng)過一段時(shí)間爭(zhēng)論后判呕,AMD(Asynchronous Module Definition,異步模塊定義)規(guī)范最終在前端應(yīng)用場(chǎng)景中勝出送滞。除此之外硼一,還有國(guó)內(nèi)玉伯的CMD。

1.AMD規(guī)范

AMD規(guī)范是CommonJS模塊規(guī)范的一個(gè)延伸,它的模塊定義如下:

define(id?,dependencies?,factory);

它的模塊id和依賴都是可選的奥吩,與node模塊相似的地方在于factory的內(nèi)容就是實(shí)際代碼中內(nèi)容。下面的代碼定義了一個(gè)簡(jiǎn)單的模塊:

define(function(){

? ?var exports = {};

? ?exports.sayHello=function(){

? ? ? ?alert('hello from module:' + module.id);

? }

? ?return exports;

})


不同的地方就是AMD模塊需要用define來(lái)明確定義一個(gè)模塊腮介,而Node實(shí)現(xiàn)中是隱式包裝的端衰,他們的目的都是作用域隔離(不知道啥是作用域隔離,去問度娘或者谷妹吧)旅东,僅在需要的時(shí)候被引入,避免掉過去那種通過全局變量或者全局命名空間的方式腾节,以免變量污染和不小心被修改荤牍。另一個(gè)區(qū)別就是內(nèi)容通過返回的方式實(shí)現(xiàn)導(dǎo)出。例如require.js的實(shí)現(xiàn)方式

2 CMD規(guī)范

它與AMD規(guī)范的主要區(qū)別在于定義模塊和依賴引入的部分康吵,AMD需要在聲明模塊的時(shí)候制定所有的依賴,通過形式參數(shù)傳遞依賴到模塊內(nèi)容中:

define(['dep1','dep2'],function(dep1,dep2)){

? ? ?return function(){};

});

而CMD模塊更接近于Node對(duì)CommonJS規(guī)范的定義:

define(factory);

在依賴部分同辣,CMD支持動(dòng)態(tài)引入耍铜,示例如下:

define(function(require,exports,module){

//這里來(lái)寫模塊內(nèi)容

})

require、exports和module通過形式參數(shù)傳遞給模塊棕兼,在需要依賴模塊時(shí),隨時(shí)調(diào)用require()引入即可靶衍。例如sea.js的實(shí)現(xiàn)方式

3.兼容多種模塊規(guī)范的寫法

前面廢話那么多,現(xiàn)在為了讓同一個(gè)模塊可以運(yùn)行在前后端颅眶,在寫作過程中需要考慮兼容前端也實(shí)現(xiàn)模塊規(guī)范的環(huán)境。為了保持前后端的一致性铡原,類庫(kù)開發(fā)者需要將類庫(kù)代碼包裝在一個(gè)閉包內(nèi)商叹。下面栗子演示如何將hello方法定義到不同的運(yùn)行環(huán)境中,兼容Node剖笙、AMD、CMD以及常見的瀏覽器環(huán)境中:(用的時(shí)候copy一下就ok了)

```

;(function(name,definition){

? ?//檢測(cè)上下文環(huán)境是否為AMD或者CMD

var hasDefine=typeof define==='function',

? ? ? hasExports=typeof module !=='undefined'&&module.exports;

if(hasDefine){

?//AMD/CMD

? ?define(definition);

}else if(hasExports){

? ? //定義為普通Node模塊

? ?module.exports=definition();

}else{

? //將模塊的執(zhí)行結(jié)果掛在window變量中过蹂,在瀏覽器中this指向window對(duì)象

? this[name]=definition();

?}

})('hello',function(){

? ? var hello=function(){};

?return hello;

})

```

至此 不足之處聚至,請(qǐng)批評(píng)指正(感謝樸靈的深入淺出nodejs)!

```

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸥印,一起剝皮案震驚了整個(gè)濱河市坦报,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌片择,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啰挪,死亡現(xiàn)場(chǎng)離奇詭異嘲叔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锰什,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)梭姓,“玉大人,你說我怎么就攤上這事誉尖≈猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵没咙,是天一觀的道長(zhǎng)千劈。 經(jīng)常有香客問我牌捷,道長(zhǎng)墙牌,這世上最難降的妖魔是什么暗甥? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任撤防,我火速辦了婚禮,結(jié)果婚禮上寄月,老公的妹妹穿的比我還像新娘。我一直安慰自己厂抖,他們只是感情好克懊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谭溉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪损搬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天谈为,我揣著相機(jī)與錄音,去河邊找鬼伞鲫。 笑死签舞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的儒搭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼傍药,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼魂仍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起擦酌,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赊舶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后笼平,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遇伞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捶牢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渐排。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灸蟆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霎迫,我是刑警寧澤帘靡,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站描姚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筒扒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一花墩、第九天 我趴在偏房一處隱蔽的房頂上張望澄步。 院中可真熱鬧,春花似錦驮俗、人聲如沸允跑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弱睦。三九已至,卻和暖如春况木,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背火惊。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工屹耐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尸疆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓犯眠,卻偏偏與公主長(zhǎng)得像症革,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子地沮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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