1. 程式人生 > 其它 >執行在服務端的JavaScript——node.js(三)

執行在服務端的JavaScript——node.js(三)

模組化的基本概念

什麼是模組化

模組化是指解決一個複雜問題時,自頂向下層逐層把系統分成若干模組的過程。對於整個系統來說,模組是可組合、分解和更換的單元。

程式設計領域中的模組化

程式設計領域中的模組化,就是遵守固定的原則,把一個大檔案拆成獨立並互相依賴的多個小模組

把程式碼進行模組化拆分的好處:

  1. 提高程式碼的複用性
  2. 提高了程式碼的可維護性
  3. 可以實現按需載入

模組化規範

模組化規範就是對程式碼進行模組化的拆分與組合時,需要遵守的哪些規則。

例如:

  • 使用什麼樣的語法格式來引用模組

  • 在模組中使用什麼樣的語法格式向外暴露成員

模組化規範的好處:大家都遵守同樣的模組化規範寫程式碼,降低了溝通成本,極大方便了各個模組之間的相互呼叫,利人利己。

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()

方法匯入自定義模組時,得到的就是module.exports所指向的物件。

共享成員時的注意點

使用require()方法匯入模組時,匯入的結果,永遠以module.exports指向的物件為準

exports物件

由於module.exports單詞寫起來比較複雜,為了簡化向外共享成員的程式碼,Node提供了exports物件。預設情況下,exports和module.exports指向同一個物件。最終共享的結果,還是以module.exports指向的物件為準。


exportjs和module.exports的使用誤區

時刻謹記,require()模組,得到的永遠是module.exports指向的物件:

為了防止混亂,建議不要在同一個模組中同時使用exports和module.exports

Node.js中的模組化規範

Node.js遵循了CommonJs模組化規範,CommonJS規定了模組的特性各個模組之間如何相互依賴

CommonJs 規定:

  1. 每個模組內部,module變數代表當前模組。

  2. module變數時一個物件,它的exports屬性(即module.exports)是對外介面。

  3. 載入某個模組,其實是載入該模組的module.exports屬性。require()用於載入模組。