module.exports属性
Node内部提供一个Module构建函数。所有模块都是Module的实例。每个模块内部,都有一个module对象,代表当前模块。它有以下属性。
module.id 模块的识别符,通常是带有绝对路径的模块文件名。
module.filename 模块的文件名,带有绝对路径。
module.loaded 返回一个布尔值,表示模块是否已经完成加载。
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块。
module.exports 表示模块对外输出的值。
使用require加载某个模块,其实是加载该模块的module.exports属性。
exports变量
为了方便,Node为每个模块提供一个exports变量,指向module.exports。
关系
(1) exprots和module.exports的关系在于指向同一个对象,在对外输出模块接口时,可以向exports对象添加方法
exports.area = function (r) {
return Math.PI * r * r;
};
exports.circumference = function (r) {
return 2 * Math.PI * r;
};
(2)当改变任意一个的指向时,如:exports = function(x) {console.log(x)};
二者的联系便中断了
(3)如果一个模块的对外接口,就是一个单一的值,不能使用exports输出,只能使用module.exports输出。
如果你觉得,exports与module.exports之间的区别很难分清,一个简单的处理方法,就是放弃使用exports,只使用module.exports。