1. 程式人生 > >Node中exports和module.exports的區別

Node中exports和module.exports的區別

module.exports屬性

Node內部提供一個Module構建函式。所有模組都是Module的例項。每個模組內部,都有一個module物件,代表當前模組。它有以下屬性。

module.id 模組的識別符,通常是帶有絕對路徑的模組檔名。
module.filename 模組的檔名,帶有絕對路徑。
module.loaded 返回一個布林值,表示模組是否已經完成載入。
module.parent 返回一個物件,表示呼叫該模組的模組。
module.children 返回一個數組,表示該模組要用到的其他模組。
module.exports 表示模組對外輸出的值。

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

exports變數

為了方便,Node為每個模組提供一個exports變數,指向module.exports。

關係

(1) exprots和module.exports的關係在於指向同一個物件,在對外輸出模組介面時,可以向exports物件新增方法

exports.area = function (r) {
  return Math.PI * r * r;
};

exports.circumference = function (r) {
  return 2 * Math
.PI * r; };

(2)當改變任意一個的指向時,如:exports = function(x) {console.log(x)};二者的聯絡便中斷了

(3)如果一個模組的對外介面,就是一個單一的值,不能使用exports輸出,只能使用module.exports輸出。

如果你覺得,exports與module.exports之間的區別很難分清,一個簡單的處理方法,就是放棄使用exports,只使用module.exports。