exports 是指向的module.exports 的引用;
module.exports 初始值为一个空对象{},所以exports 初始值也是{};
require() 返回的是module.exports 而不是exports。
所以:我们通过
var name = '张三'; exports.name = name; exports.sayName = function() { console.log(name); }
给exports赋值其实是给module.exports 这个空对象添加了两个属性而已,上面的代码相当于:
var name = '张三'; module.exports.name = name; module.exports.sayName = function() { console.log(name); }
下面就在微信小程序中module.exports和exports的区别做出示例
function sayHello(name) { console.log(`Hello ${name} !`); } function sayGoodbye(name) { console.log(`Goodbye ${name} !`); }
第一种情况,module.exports初始值为空对象,两个函数使用module.exports或exports都一样效果
module.exports.sayHello = sayHello; module.exports.sayGoodbye = sayGoodbye; exports.sayHello = sayHello; exports.sayGoodbye = sayGoodbye;
第二种情况,module.exports初始值不为空对象,只能使用module.exports暴露接口,而不能使用exports暴露,会出现is not a function错误。
module.exports = {name:1};// module.exports给一个初始值
以下两个正常使用
module.exports.sayHello = sayHello; module.exports.sayGoodbye = sayGoodbye;
使用以下两个会报错误sayHello is not a function
exports.sayHello = sayHello; exports.sayGoodbye = sayGoodbye;