在node中,每個模塊內部都有一個自己的module對象溃论,該module對象中有一個成員叫exports状答,默認在代碼的最后有一句return module.exports粉洼。
如果需要對外導出成員,只需要把導出的成員掛載到module.exports仅财。
var module = {
exports:{}
}
...
return module.exports
然而每次導出接口成員的時候都通過module.exports.xxx太麻煩了狈究,node為了簡化操作,專門提供了一個變量:exports 等于module.exports盏求,也就是說在模塊中還有這么一句代碼:
var exports = module.exports
console.log(exports == module.exports) //結果為true
那么就可以使用任意一方導出內部成員谦炒。
原理
exports是module.exports
的一個引用
exports.foo = 'xxx'
//等價于
module.exports.foo = 'xxx'
當一個模塊需要導出單個成員的時候,直接給exports賦值是不管用的风喇,例如:
exports = 'hello'
因為exports是module.exports的一個引用宁改,給exports重新賦值,就指向另一個對象了魂莫,丟失了引用關系还蹲。最后return module.exports
,而不是return exports耙考。
同理谜喊,給module.exports重新賦值,也會丟失引用關系倦始。
二者丟失引用關系之后斗遏,還可以重新建立引用關系:exports = module.exports