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