1. 程式人生 > >node--module模組--Mr.Ember

node--module模組--Mr.Ember

 

node--module模組

摘要:

主要是從module的幾個特性講解

 

1. 穩定性  

export.a = function() {};
export.b = function() {};

這裡兩個函式都是被新增到exports根部的物件上,模組內本地變數是私有的。

 

2. 訪問主模組

require.main === module

如果直接用node執行某個檔案,那這個檔案就是主模組,預設被賦值給require.main。

 

3. 快取

 模組在第一次載入後就會被快取,多次呼叫不會導致模組的程式碼多次執行,可以但會'部分完成'的物件,從而允許載入依賴的模組,所以不會導致迴圈依賴。

 

4. 迴圈

 當迴圈呼叫require()時,一個模組可能在未完成執行時被返回。

執行順序:
       main.js
       b.js
       a.js
       b.js ->done
       a.js ->done
       main.js -> done

 

 

5. 目錄作為模組

 require()尋找路徑先通過尋找package.json中的main模組,在根據main模組的路徑,尋找當前所在的路徑位置

 

6. 模組包裝器(劃重點

 在執行程式碼前,node.js會使用下面這個函式把檔案包裝起來

(function(exports, require, module, __filename, __dirname) {

  //.......真正要執行的部分

})

 

包裝的原因

(1)保證定義的變數的模組化

(2)提供一些看似全域性,但實際上是模組特定的變數

7. 模組的作用域

 (1) __dirname: 當前木塊的目錄

 (2)__filename: 當前木塊的檔名(局對路徑)

 (3)exports: exports雖然是module.exports的簡寫,但是一旦 exports被賦值,module.exports就無法改變這個值了

 (4)module: 在每個模組中,module 的自由變數是一個指向表示當前模組的物件的引用。 為了方便,module.exports 也可以通過全域性模組的 exports 物件訪問。 module實際上不是全域性的,而是每個模組本地的。