說起模塊化開發(fā)大家想必都不陌生纯出,特別是隨著前端應(yīng)用復(fù)雜化猴鲫,代碼呈倍數(shù)增長,我們不得不耗費大量的時間去進行管理滞详,模塊化也就逐漸的被大家所接受凛俱。
所以具體來講的話,模塊化開發(fā)就是指將復(fù)雜的應(yīng)用功能分為多個模塊進行開發(fā)料饥,這樣一來一個模塊就是實現(xiàn)特定功能的文件最冰,有了模塊,最直接的價值就是我們可以更方便地管理代碼稀火,甚至是直接引入使用別人的代碼暖哨,想要什么功能,就加載什么模塊凰狞。
模塊化開發(fā)的發(fā)展
其實早期 JavaScript 的模塊化是基于文件劃分的方式去實現(xiàn)的篇裁,這是我們 web 當中最原始化的模塊系統(tǒng),當然這個方式下有幾個突出的問題赡若,例如命名沖突达布、全局污染等。
后面我們采用命名空間方式逾冬,約定每一個模塊只暴露一個全局的對象黍聂,所有的模塊成員都掛載到這個對象下面,具體做法就是在 JavaScript 的模塊化的基礎(chǔ)上身腻,將每一個模塊包裹成為全局對象的方式去實現(xiàn)产还,類似于在模塊內(nèi)去為我們的模塊一些成員去添加命名空間,但這種方式有一個明顯的問題就是沒有解決模塊之間的依賴性問題嘀趟。
再到后面也出現(xiàn)了立即執(zhí)行函數(shù)的方式(IIFE)脐区,他的原理就是將每一個模塊都放到函數(shù)私有作用域當中,對于需要暴露的成員她按,再通過掛載到全局對象的方式去實現(xiàn)牛隅,這里也有一個實際的例子:
;(function () {
var name = 'module1'
function moduleFn() {
console.log(name + '---> moduleFn');
}
window.module1 = {
moduleFn: moduleFn
}
})()
復(fù)制
而發(fā)展至今炕柔,模塊化開發(fā)又有了新的發(fā)展和技術(shù)實現(xiàn)方式,特別是在混合應(yīng)用快速發(fā)展的今天媒佣,應(yīng)用功能更加多樣匕累,代碼更加復(fù)雜,模塊化開發(fā)的重要性似乎成為一項共識默伍。
模塊化開發(fā)的優(yōu)點
如果要說模塊化開發(fā)和傳統(tǒng)開發(fā)模式最大的區(qū)別哩罪,個人認為除了實現(xiàn)的方式不一致外,其實模塊化開發(fā)還能在開發(fā)效率巡验、便捷度上面有不小的提升际插。更為具體來講,我認為主要體現(xiàn)在以下四個方面:
1显设、架構(gòu)靈活框弛,焦點分離
在模塊化開發(fā)中模塊化本身能夠根據(jù)實際需求和變化進行靈活的調(diào)整和擴展,可以將系統(tǒng)劃分為不同的層次捕捂,如數(shù)據(jù)訪問層瑟枫、業(yè)務(wù)邏輯層、表示層等指攒。這種分層設(shè)計方式可以降低系統(tǒng)的耦合性慷妙,在一定程度上提升系統(tǒng)的擴展能力。
焦點分離上面則表現(xiàn)為可以將關(guān)注點分為功能需求和性能需求允悦,然后分別進行開發(fā)和測試膝擂,從而實現(xiàn)系統(tǒng)復(fù)雜性的降低。
2隙弛、方便模塊間組合架馋、分解
在模塊化開發(fā)中,組合和分解都很好理解全闷,組合顧名思義就是指將不同的模塊按照一定的方式組裝起來叉寂,這樣可以實現(xiàn)更為復(fù)雜的功能或場景,而分解反過來就是將一個復(fù)雜模塊分解為若干個簡單的子模塊总珠,以便更好地功能實現(xiàn)和維護屏鳍。
3、方便單個模塊功能調(diào)試局服、升級
當我們采用模塊化開發(fā)后钓瞭,很多的復(fù)雜功能成為單獨的一個模塊,如果對于某個模塊需要進行功能的debug或者升級腌逢,那可以很快的針對這個功能模塊開展降淮,而不用牽一發(fā)而動全身。
4搏讶、多人協(xié)作互不干擾
這個非常好理解佳鳖,由于模塊化本身就是系統(tǒng)解耦方式實現(xiàn)的,分為多個模塊化也就對應(yīng)著多個代碼包媒惕,這樣一來相互協(xié)作不受影響也是提升效率的一種方式系吩。
模塊化開發(fā)的現(xiàn)狀
模塊化也是隨著技術(shù)的發(fā)展不斷的更新,例如目前受到眾多開發(fā)者青睞的開發(fā)方式就包括依賴打包和依賴加載妒蔚。
1穿挨、依賴加載
目前這種方式是應(yīng)用較為廣泛的,像 require js肴盏、sea.js等科盛,除了編寫規(guī)范不一樣,實際都是通過相關(guān)require api把模塊 chunk 文件拿回來菜皂,當加載完成之后再運行邏輯代碼贞绵。
2、依賴打包
經(jīng)典代表就 Webpack恍飘,其實就是寫代碼的時候分開模塊榨崩,但打包的時候按依賴關(guān)系找到各個模塊,最后打包到同一個文件上章母,并給每個chunk標識id母蛛,運行邏輯代碼時將模塊引用指向該id,從而實現(xiàn)模塊化乳怎。
3彩郊、小程序化
此外,隨著微信蚪缀、支付寶等App的實踐焦辅,小程序容器技術(shù)也成為模塊化的一種選擇,他的原理其實就和前面模塊化開發(fā)的模式一直椿胯,將復(fù)雜緊耦合的功能應(yīng)用解耦為一個一個的小模塊筷登,但不同的是這些小模塊的承載方式都換為了小程序,從開發(fā)和管理的角度來看更為簡約一些哩盲。
如果以一個復(fù)雜的手機銀行app為例前方,相當于應(yīng)用小程序容器技術(shù)將臃腫的APP功能打散,功能模塊互相解耦廉油,每個業(yè)務(wù)功能都最小化惠险、積木化、樂高化的小程序抒线。