模塊化:常見規(guī)范

什么是模塊化鹦马?為什么要模塊化?

命名沖突:為了方便也避免重復(fù)造輪子物赶,我們習(xí)慣于把一些通用的、底層的工具抽離出來留晚,例如寫成一個函數(shù)放在另一個文件中酵紫,我們需要的時候再去引用就可以;但是在工具中被定義的變量我不能在當(dāng)前文件使用错维,因為會產(chǎn)生沖突導(dǎo)致工具無法正常使用奖地。所以我們希望這個工具能是一個獨立的空間,不要影響到當(dāng)前頁面的開發(fā)赋焕。
文件依賴:當(dāng)我們在寫一個新工具的時候参歹,有可能會需要調(diào)用其它功能更小的工具;那么在執(zhí)行時因為js的同步特性宏邮,要使用這個新工具就必須要先加載小工具泽示,也就是說小工具要先于新工具去引入缸血;當(dāng)引入文件較多或者順序亂了之后維護起來非常困難。
原因:使用模塊化主要是為了解決兩個問題:命名沖突和文件依賴械筛。
模塊化x命名沖突:用面向?qū)ο蟮姆绞綄⒎椒ㄉ有骸⒐ぞ呓壴趯ο笊希患s定用關(guān)鍵字exports暴露接口返回對象埋哟。
模塊化x文件依賴:約定關(guān)鍵字require來獲取對象將文件依賴內(nèi)置笆豁,不需要外部引入。

CMD赤赊、AMD闯狱、CommonJS 規(guī)范分別指什么?

Common JS:它是一個規(guī)范抛计,它通過定義豐富的能解決一些通常的應(yīng)用開發(fā)需求的API來補足了js官方關(guān)于標(biāo)準(zhǔn)庫的不足哄孤。建立它的意圖是希望開發(fā)者可以運用這些API去開發(fā)應(yīng)用,而且所開發(fā)的應(yīng)用能夠在不同的js環(huán)境中運行而不僅僅是瀏覽器吹截。服務(wù)器端的javascript應(yīng)用node.js就是運用Common JS的一個例子瘦陈,服務(wù)器端的程序比瀏覽器端要更復(fù)雜,也需要與操作系統(tǒng)和其他程序互動波俄,因此服務(wù)器端必須要模塊塊以便應(yīng)對上述問題晨逝。node.js參照Common JS 規(guī)范創(chuàng)建了模塊系統(tǒng),模塊系統(tǒng)通過exports暴露接口返回對象懦铺,通過require獲取接口返回的對象捉貌。例如

// math.js文件 的內(nèi)容:
 exports.method=function(){
  var obj=xxx;
  // doing something
  return obj;
 };

 // main.js文件 的內(nèi)容:
 var newObj= require('math').method;
 // 當(dāng)然 main.js可以繼續(xù)exports接口 以供其他文件調(diào)用

AMD"Asynchronous Module Definition"即異步模塊定義,實現(xiàn)AMD的庫有RequireJS 冬念、curl 趁窃、Dojo 等。在服務(wù)器端采用的Common JS規(guī)范到瀏覽器端因為同步執(zhí)行加載的問題會導(dǎo)致瀏覽器在加載獲取時處于假死狀態(tài)什么都不能做只能等引用加載完刘急,AMD在這種環(huán)境下誕生了棚菊;AMD采用異步加載的方式去獲取引用的js,待加載完成后采取執(zhí)行對應(yīng)程序叔汁,從而避免了等待和瀏覽器假死的狀況。它的語法和應(yīng)用如下:

// 語法
define(id?,dependencies?,factory); 
// id 即對這個模塊命名
// dependencies 這個模塊所依賴的其他模塊 多個時用數(shù)組傳遞
// factory 加載完成后執(zhí)行的回調(diào)函數(shù)

// math.js文件 定義模塊
define(function(){
  var obj=xxx;
  // doing somethig 
  return obj
})

// main.js文件 加載模塊
define(method,['math'],function(math){
  //把加載的模塊傳遞進來 doing something
})

CMD:CMD(Common Module Definition)是Sea JS推廣過程中產(chǎn)生的检碗。在 CMD 規(guī)范中据块,一個模塊就是一個文件。其語法與comment js類似折剃,不過多了一個外包裝另假;且相對與AMD的提前設(shè)置依賴,CMD的區(qū)別就是它將依賴內(nèi)置了怕犁,需要時就使用require去獲取边篮,從表面上看實現(xiàn)了comment js的瀏覽器端化己莺,但實質(zhì)是通過設(shè)置外包裝 define(function(require, exports, module){}來包裹代碼,提前去加載引用的模塊戈轿,等加載完成后再同步執(zhí)行凌受。

// 語法 一個模塊就是一個文件
define(factory);

//math.js 定義
define(function(require, exports, module){
  exports.obj=xxx;
})
// main.js 加載引用
define(function(require, exports, module){
  var method=require('math').obj;
  //doing something
})
// 當(dāng)然這個模塊也可以繼續(xù)exports接口 讓其他模塊調(diào)用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市思杯,隨后出現(xiàn)的幾起案子胜蛉,更是在濱河造成了極大的恐慌,老刑警劉巖色乾,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊册,死亡現(xiàn)場離奇詭異,居然都是意外死亡暖璧,警方通過查閱死者的電腦和手機案怯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澎办,“玉大人嘲碱,你說我怎么就攤上這事「〔担” “怎么了悍汛?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長至会。 經(jīng)常有香客問我离咐,道長,這世上最難降的妖魔是什么奉件? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任宵蛀,我火速辦了婚禮,結(jié)果婚禮上县貌,老公的妹妹穿的比我還像新娘术陶。我一直安慰自己,他們只是感情好煤痕,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布梧宫。 她就那樣靜靜地躺著,像睡著了一般摆碉。 火紅的嫁衣襯著肌膚如雪塘匣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天巷帝,我揣著相機與錄音忌卤,去河邊找鬼。 笑死楞泼,一個胖子當(dāng)著我的面吹牛驰徊,可吹牛的內(nèi)容都是我干的笤闯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼棍厂,長吁一口氣:“原來是場噩夢啊……” “哼颗味!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勋桶,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脱衙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后例驹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捐韩,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年鹃锈,在試婚紗的時候發(fā)現(xiàn)自己被綠了荤胁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡屎债,死狀恐怖仅政,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盆驹,我是刑警寧澤圆丹,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布授霸,位于F島的核電站右锨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抹估。R本人自食惡果不足惜廉丽,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一倦微、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧正压,春花似錦欣福、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘉裤,卻和暖如春凿将,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背价脾。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笛匙,地道東北人侨把。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓犀变,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秋柄。 傳聞我的和親對象是個殘疾皇子获枝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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