概念
把代碼從上而下一一整理成許多板塊,使代碼能夠組合、拆分和更換且不影響正常的實作運行,
好處
a . 可維護性
1、靈活架構,焦點分離
2、方便模塊間組合、分解
3、方便單個模塊功能除錯、升級
4、多人協作互不干擾
b . 可復用性
c . 可實作按需加載
缺點:
性能損耗
1、系統分層,呼叫鏈會很長
2、模塊間發送訊息會很耗性能
node.js中模塊的分類
內置模塊:fs、path、http等
自定義模塊: 我們創建的每一個.js后綴的檔案都是自定義模塊
第三方模塊:第三方開發的模塊,并不是官方提供,使用前要先下載
注意:
1.在使用require加載其他模塊后會執行被加載模塊代碼
2.再使用require加載用戶自定義模塊期間可以省略.js后綴名
模塊作用域
與函式的作用域相似,在自定義模塊中所定義的變數、方法等只能再當前模塊內才能夠進行訪問,外部檔案不能訪問,這種叫做模塊作用域
好處:防止全域變數污染,檔案依賴等問題
模塊化規范
? 使用什么樣的語法格式來參考模塊
? 在模塊中使用什么樣的語法格式向外暴露成員
1.CommonJS規范(同步加載模塊)
- 允許模塊通過require方法來同步加載所要依賴的其他模塊,然后通過exports或module.exports來匯出需要暴露的介面,
-
優點:
- 簡單容易使用
- 服務器端模塊便于復用
-
缺點:
- 同步加載方式不適合在瀏覽器環境中使用,同步意味著阻塞加載,瀏覽器資源是異步加載的
- 不能非阻塞的并行加載多個模塊
2.AMD(異步加載模塊)
- 采用異步方式加載模塊,模塊的加載不影響后面陳述句的運行,所有依賴模塊的陳述句,都定義在一個回呼函式中,等到加載完成之后,回呼函式才執行,
- 加載模塊
require([module], callback);第一個引數[module],是一個陣列,里面的成員就是要加載的模塊;第二個引數callback是加載成功之后的回呼函, -
優點:
- 適合在瀏覽器環境中異步加載模塊
- 可以并行加載多個模塊
-
缺點:
- 提高了開發成本,代碼的閱讀和書寫比較困難,模塊定義方式的語意不順暢
- 不符合通用的模塊化思維方式,是一種妥協的實作
3.CMD規范(異步加載模塊)
- CMD規范和AMD很相似,簡單,并與CommonJS和Node.js的 Modules 規范保持了很大的兼容性;在CMD規范中,一個模塊就是一個檔案,
- 定義模塊使用全域函式define,其接收 factory 引數,factory 可以是一個函式,也可以是一個物件或字串;
-
factory 是一個函式,有三個引數,function(require, exports, module):
- require 是一個方法,接受模塊標識作為唯一引數,用來獲取其他模塊提供的介面:require(id)
- exports 是一個物件,用來向外提供模塊介面
- module 是一個物件,上面存盤了與當前模塊相關聯的一些屬性和方法
- 優點:
- 依賴就近,延遲執行
- 可以很容易在 Node.js 中運行
- 缺點:
- 依賴 SPM 打包,模塊的加載邏輯偏重
- 實作代表庫
sea.js:SeaJS對模塊的態度是懶執行, SeaJS只會在真正需要使用(依賴)模塊時才執行該模塊
4.UMD
- UMD是AMD和CommonJS的糅合
- AMD 以瀏覽器第一原則發展異步加載模塊,
- CommonJS 模塊以服務器第一原則發展,選擇同步加載,它的模塊無需包裝,
- UMD先判斷是否支持Node.js的模塊(exports)是否存在,存在則使用Node.js模塊模式;在判斷是否支持AMD(define是否存在),存在則使用AMD方式加載模塊,
5.ES6模塊化
- ES6 在語言標準的層面上,實作了模塊功能,而且實作得相當簡單,完全可以取代 CommonJS 和 AMD 規范,成為瀏覽器和服務器通用的模塊解決方案,
-
ES6 模塊設計思想:盡量的靜態化、使得編譯時就能確定模塊的依賴關系,以及輸入和輸出的變數(CommonJS和AMD模塊,都只能在運行時確定這些東西),
- 優點:
- 容易進行靜態分析
- 面向未來的 EcmaScript 標準
- 缺點:
- 原生瀏覽器端還沒有實作該標準
- 全新的命令字,新版的 Node.js才支持,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/305993.html
標籤:其他
上一篇:模塊化的理解
下一篇:模塊化筆記
