module.exports vs exports in Node.js
commonjs, javascript, node.js
Solution
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.
Problem
I've found the following contract in a Node.js module: ``` module.exports = exports = nano = function database_module(cfg) {...} ``` I wonder what's the difference between `module.exports` and `exports` and why both are used here.