Setting module.exports
allows the database_module
function to be called like a function when required
. Simply setting exports
wouldn’t allow the function to be exported because node exports the object module.exports
references. The following code wouldn’t allow the user to call the function.
module.js
The following won’t work.
exports = nano = function database_module(cfg) {return;}
The following will work if module.exports
is set.
module.exports = exports = nano = function database_module(cfg) {return;}
console
var func = require('./module.js'); // the following line will **work** with module.exports func();
Basically node.js doesn’t export the object that exports
currently references, but exports the properties of what exports
originally references. Although Node.js does export the object module.exports
references, allowing you to call it like a function.
2nd least important reason
They set both module.exports
and exports
to ensure exports
isn’t referencing the prior exported object. By setting both you use exports
as a shorthand and avoid potential bugs later on down the road.
Using exports.prop = true
instead of module.exports.prop = true
saves characters and avoids confusion.