1. 程式人生 > >CommonJS規範 module.export與exports區別

CommonJS規範 module.export與exports區別

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改變了指向之後,就會不在生效。