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改变了指向之后,就会不在生效。

猜你喜欢

转载自blog.csdn.net/qq_38045106/article/details/83549966
今日推荐