這篇文章主要介紹了了解Javascript的模塊化開發,本文講解了為什麼需要模塊化開發,模塊化開發的形成原因等內容,需要的朋友可以參考下
小A是某個創業團隊的前端工程師,負責編寫項目的Javascript程序。
全局變量沖突
根據自己的經驗,小A先把一些常用的功能抽出來,寫成函數放到一個公用文件base.js中:
代碼如下:
小C是小A的同事,他向小A反映:自己的頁面引入了一個叫做underscore.js的類庫,而且,這個類庫也會占用_這個全局變量,這樣一來就會跟base.js中的_沖突了。小A心想,underscore.js是第三方類庫,估計不好改,但是base.js已經在很多頁面鋪開,不可能改。最後小A只好無奈地把underscore.js占用的全局變量改了。
此時,小A發現,把函數都放在一個名字空間內,可以減少全局變量沖突的概率,卻沒有解決全局變量沖突這個問題。
依賴
隨著業務的發展,小A又編寫了一系列的函數庫和UI組件,比方說標簽切換組件tabs.js,此組件需調用base.js以及util.js中的函數。
有一天,新同事小D跟小A反映,自己已經在頁面中引用了tabs.js,功能卻不正常。小A一看就發現問題了,原來小D不知道tabs.js依賴於base.js以及util.js,他並沒有添加這兩個文件的引用。於是,他馬上進行修改:
代碼如下:
小A心想,他是作者,自然知道組件的依賴情況,但是別人就難說了,特別是新人。
過了一段時間,小A給標簽切換組件增加了功能,為了實現這個功能,tabs.js還需要調用ui.js中的函數。這時,小A發現了一個嚴重的問題,他需要在所有調用了tabs.js的頁面上增加ui.js的引用!!!
又過了一段時間,小A優化了tabs.js,這個組件已經不再依賴於util.js,所以他在所有用到tabs.js的頁面中移除了util.js的引用,以提高性能。他這一修改,出大事了,測試組MM告訴他,有些頁面不正常了。小A一看,恍然大悟,原來某些頁面的其他功能用到了util.js中的函數,他把這個文件的引用去掉導致出錯了。為了保證功能正常,他又把代碼恢復了。
小A又想,有沒有辦法在修改依賴的同時不用逐一修改頁面,也不影響其他功能呢?
模塊化
小A逛互聯網的時候,無意中發現了一種新奇的模塊化編碼方式,可以把它之前遇到的問題全部解決。
在模塊化編程方式下,每個文件都是一個模塊。每個模塊都由一個名為define的函數創建。例如,把base.js改造成一個模塊後,代碼會變成這樣:
代碼如下:
那如何調用某個模塊提供的接口呢?以tabs.js為例,它要依賴於base.js和util.js:
代碼如下:
由於缺乏浏覽器的原生支持,如果我們要用模塊化的方式編碼,就必須借助於一個叫做加載器(loader)的東西。
目前加載器的實現有很多,比如require.js、seajs。而JRaiser類庫也有自己的加載器。