JS模塊化編程

在兼容CommonJS的系統(tǒng)中,你可以使用JavaScript開發(fā)以下程序:
(1).服務(wù)器端JavaScript應(yīng)用程序
(2).命令行工具
(3).圖形界面應(yīng)用程序
(4).混合應(yīng)用程序(如,Titanium或Adobe AIR)

JS模塊化進(jìn)程的起因

現(xiàn)今的很多網(wǎng)頁(yè)其實(shí)可以看做是功能豐富的應(yīng)用,它們擁有著復(fù)雜的JavaScript代碼和一大堆依賴包。當(dāng)一個(gè)項(xiàng)目開發(fā)的越來越復(fù)雜的時(shí)候,會(huì)遇到一些問題:命名沖突(變量和函數(shù)命名可能相同),文件依賴(引入外部的文件數(shù)目、順序問題)等。

什么是模塊化

模塊化開發(fā)是一種管理方式,是一種生產(chǎn)方式,一種解決問題的方案。他按照功能將一個(gè)軟件切分成許多部分單獨(dú)開發(fā),然后再組裝起來,每一個(gè)部分即為模塊。當(dāng)使用模塊化開發(fā)的時(shí)候可以避免剛剛的問題,并且讓開發(fā)的效率變高,以及方便后期的維護(hù)。

模塊化的好處

  • 避免命名沖突(減少命名空間污染)
  • 更好的分離,按需加載
  • 更高復(fù)用性
  • 高可維護(hù)性

JS中的模塊規(guī)范(CommonJS,AMD,CMD)

發(fā)展歷程一:CommonJS規(guī)范

允許模塊通過require方法來 同步 加載(同步意味阻塞)所要依賴的其他模塊,然后通過module.exports來導(dǎo)出需要暴露的接口。CommonJS 是以在瀏覽器環(huán)境之外構(gòu)建JavaScript 生態(tài)系統(tǒng)為目標(biāo)而產(chǎn)生的項(xiàng)目,比如在服務(wù)器和桌面環(huán)境中。

發(fā)展歷程二:AMD/CMD

AMD

AMD 是 RequireJS 在推廣過程中對(duì)模塊定義的規(guī)范化產(chǎn)出(異步模塊定義)。
AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它后面語(yǔ)句的運(yùn)行。所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。

AMD標(biāo)準(zhǔn)中定義了以下兩個(gè)API:
require([module], callback);
define(id, [depends], callback);
require接口用來加載一系列模塊,define接口用來定義并暴露一個(gè)模塊。

優(yōu)點(diǎn):

  • 適合在瀏覽器環(huán)境中異步加載模塊
  • 可以并行加載多個(gè)模塊

CMD

CMD 是 SeaJS 在推廣過程中對(duì)模塊定義的規(guī)范化產(chǎn)出。(在CommomJS和AMD基礎(chǔ)上提出)
優(yōu)點(diǎn):

  • 依賴就近,延遲執(zhí)行
  • 可以很容易在服務(wù)器中運(yùn)行

AMD 和 CMD 的區(qū)別

AMD和CMD起來很相似,但是還是有一些細(xì)微的差別:

  • 對(duì)于依賴的模塊,AMD是提前執(zhí)行,CMD是延遲執(zhí)行。
  • AMD推崇依賴前置;CMD推崇依賴就近,只有在用到某個(gè)模塊的時(shí)候再去require。
  • AMD 的 API 默認(rèn)是一個(gè)當(dāng)多個(gè)用,CMD 的 API 嚴(yán)格區(qū)分,推崇職責(zé)單一

發(fā)展歷程三:ES6模塊化

EcmaScript6 標(biāo)準(zhǔn)增加了JavaScript語(yǔ)言層面的模塊體系定義。
在 ES6 中,我們使用export關(guān)鍵字來導(dǎo)出模塊,使用import關(guān)鍵字引用模塊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 模塊的寫法 原始寫法 模塊就是實(shí)現(xiàn)特定功能的一組方法。只要把不同的函數(shù)(以及記錄狀態(tài)的變量)簡(jiǎn)單地放在一起,就算是...
    oWSQo閱讀 297評(píng)論 0 2
  • Javascript模塊化編程,已經(jīng)成為一個(gè)迫切的需求。理想情況下,開發(fā)者只需要實(shí)現(xiàn)核心的業(yè)務(wù)邏輯,其他都可以加載...
    zhoulujun閱讀 3,024評(píng)論 0 14
  • 什么是模塊化 模塊化就是把一個(gè)文件看成一個(gè)模塊。每個(gè)模塊有自己的命名空間。 如何模塊化 使用立即執(zhí)行表達(dá)式來創(chuàng)建單...
    logoss閱讀 769評(píng)論 0 0
  • 今天又可以上圍棋課,我非常開心。今天我們學(xué)的是——雙打吃。最后我跟老師下棋了,我用了扭羊頭,吃掉了老師的8...
    劉澤翰同學(xué)閱讀 299評(píng)論 0 0
  • 前些日子看到微博上的這個(gè)話題,看到這些評(píng)論和配圖,想起了曾經(jīng)的自己。 那會(huì)兒大概是剛畢業(yè),房租和室友平分也要...
    巡山大王浪里個(gè)郎閱讀 295評(píng)論 0 1

友情鏈接更多精彩內(nèi)容