執行在服務端的JavaScript——node.js(三)
模組化的基本概念
什麼是模組化
模組化是指解決一個複雜問題時,自頂向下層逐層把系統分成若干模組的過程。對於整個系統來說,模組是可組合、分解和更換的單元。
程式設計領域中的模組化
程式設計領域中的模組化,就是遵守固定的原則,把一個大檔案拆成獨立並互相依賴的多個小模組。
把程式碼進行模組化拆分的好處:
- 提高程式碼的複用性
- 提高了程式碼的可維護性
- 可以實現按需載入
模組化規範
模組化規範就是對程式碼進行模組化的拆分與組合時,需要遵守的哪些規則。
例如:
-
使用什麼樣的語法格式來引用模組
-
在模組中使用什麼樣的語法格式向外暴露成員
模組化規範的好處:大家都遵守同樣的模組化規範寫程式碼,降低了溝通成本,極大方便了各個模組之間的相互呼叫,利人利己。
Node.js中模組化分類
Node.js中根據模組來源不同,將模組分為了三大類,分別是:
-
內建模組(內建模組是由Node.js官方提供的,例如fs、path、http等)
-
自定義模組(使用者建立的每個.js檔案,都是自定義模組)
-
第三方模組(由第三方開發出來的模組,並非官方提供的內建模組,也不是使用者建立的自定義模組,使用前需要先下載)
載入模組
使用強大的require()
方法,可以載入需要的內建模組、使用者自定義模組、第三方模組進行使用。例如:
// 載入內建的fs模組 const fs = require('fs') // 載入使用者的自定義模組 const custom = require('./custom.js') // 載入第三方模組 const moment = require('moment')
使用
require()
方法載入其它模組時,會執行被載入模組中的程式碼.在使用require載入使用者自定義模組期間,可以省略.js字尾名。
Node.js中的模組作用域
什麼是模組作用域
和函式作用域類似,在自定義模組中定義的變數。方法等成員,只能在當前模組內被訪問,這種模組級別的訪問限制,叫做模組作用域。
模組作用域的好處
防止了全域性變數汙染的問題
向外共享模組作用域中的成員
module物件
在每個.js自定義模組中都有一個module物件,它裡面儲存了和當前模組有關的資訊,列印如下:
module.exports物件
在自定義模組中,可以使用module.exports物件,將模組內的成員共享出去,供外界使用。
外界用require()
共享成員時的注意點
使用require()方法匯入模組時,匯入的結果,永遠以module.exports指向的物件為準
exports物件
由於module.exports單詞寫起來比較複雜,為了簡化向外共享成員的程式碼,Node提供了exports物件。預設情況下,exports和module.exports指向同一個物件。最終共享的結果,還是以module.exports指向的物件為準。
exportjs和module.exports的使用誤區
時刻謹記,require()
模組,得到的永遠是module.exports指向的物件:
Node.js中的模組化規範
Node.js遵循了CommonJs模組化規範,CommonJS規定了模組的特性和各個模組之間如何相互依賴。
CommonJs 規定:
-
每個模組內部,module變數代表當前模組。
-
module變數時一個物件,它的exports屬性(即module.exports)是對外介面。
-
載入某個模組,其實是載入該模組的module.exports屬性。require()用於載入模組。