principlejavascriptCritical
module.exports vs exports in Node.js
Viewed 0 times
moduleexportsnode
Problem
I've found the following contract in a Node.js module:
I wonder what's the difference between
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.Solution
Setting
exported because node exports the object
module.js
The following won't work.
The following will work if
console
Basically node.js doesn't export the object that
2nd least important reason
They set both
Using
module.exports allows the database_module function to be called like a function when required. Simply setting exports wouldn't allow the function to beexported 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.Code Snippets
exports = nano = function database_module(cfg) {return;}module.exports = exports = nano = function database_module(cfg) {return;}var func = require('./module.js');
// the following line will **work** with module.exports
func();Context
Stack Overflow Q#7137397, score: 462
Revisions (0)
No revisions yet.