node does something like this:
module.exports = exports = {}
module.exports and exports refer to same object.
This is done just for convenience. so instead of writing something like this
module.exports.PI = 3.14
we can write
exports.PI = 3.14
so it is ok to add a property to exports but assigning it to a different object is not ok
exports.add = function(){
.
.
}
? this is OK and same as module.exports.add = function(){...}
exports = function(){
.
.
}
? this is not ok and and empty object will be returned as module.exports still refers to {} and exports refer to different object.