什么是模塊化:
CommoonJs
每一個js文件就是一個就是模塊,每個模塊有單獨的作用域。
模塊以module.exports為出口,輸出一個對象。
使用require方法讀取文件,並返回其內部的module.exports對象。
問題:
同步加載,在服務端很正常但是在充滿異步的瀏覽器中用就不合適了。
AMD
規定用全局全局變量函數define來定義模塊,用法為define(id,dependencies,factory);
id:模塊標識
dependencies:是一個數組,里面是該模塊依賴的其他模塊
factory:是一個匿名函數,里面是該模塊的邏輯。
CMD
seajs全面擁抱Modules/Wrappings規范,不用requirejs那樣回調的方式來編寫模塊。
而它也不是完全按照Modules/Wrappings規范,seajs並沒有使用declare來定義模塊,而是使用和requirejs一樣的define。定義模塊時無需羅列依賴數組,在factory函數中需傳入形參require,exports,module,然后它會調用factory函數的toString方法,
對函數的內容進行正則匹配,通過匹配到的require語句來分析依賴。
AMD與CMD的區別
AMD和CMD最明顯的區別就是在模塊定義時對依賴的處理不同
AMD推崇依賴前置,在定義模塊的時候就要聲明其依賴的模塊
CMD推崇就近依賴,只有在用到某個模塊的時候再去require
模塊化設計的優點:
1、非常便於內容的組織和管理;
2、適用於響應式框架;
3、融合卡片和極簡風格;