CommonJS規範 module.export與exports區別
阿新 • • 發佈:2018-11-01
const exports= module.exports;
exports只是module.exports的快捷方式
在index.js裡寫入
exports.test = 100;//意思就是直接輸出一個test變數
在main 裡引入
const mod=require('.index');
console.log(mod.test);
在cmd 輸出 F:\nodeFile\ main.js
100
但是在index.js裡如果這麼寫的話,exports就是一個物件,和module.exports沒有啥關係了,比如:
exports = { a:1, b:2, test:100 };
在輸出裡是拿不到test的值得.這時要加上 module.
module.exports = {
a:1,
b:2,
test:100
};
內部原理:
- exports = module.exports = {};
-
exports是module.exports的一個引用
-
require引用模組後,返回給呼叫者的是module.exports而不是exports
-
exports.xxx
,相當於在匯出物件上掛屬性,該屬性對呼叫模組直接可見 -
exports =
相當於給exports物件重新賦值,呼叫模組不能訪問exports物件及其屬性 -
如果此模組是一個類,就應該直接賦值
module.exports
,這樣呼叫者就是一個類構造器,可以直接new例項
小結:exports會預設設定為module.exports的快捷方式,可以往裡面新增屬性( exports.test ),但是不可以修改它的指向,修改了他的指向,他就和普通的物件沒有啥差別,因為在common.js裡模組對外輸出永遠是module.exports,如果exports改變了指向之後,就會不在生效。