What is the purpose of Node.js module.exports and how do you use it?

javascript, node.js

Solution

`module.exports` is the object that's actually returned as the result of a `require` call.

The `exports` variable is initially set to that same object (i.e. it's a shorthand "alias"), so in the module code you would usually write something like this:

let myFunc1 = function() { ... };
let myFunc2 = function() { ... };
exports.myFunc1 = myFunc1;
exports.myFunc2 = myFunc2;

to export (or "expose") the internally scoped functions `myFunc1` and `myFunc2`.

And in the calling code you would use:

const m = require('./mymodule');
m.myFunc1();

where the last line shows how the result of `require` is (usually) just a plain object whose properties may be accessed.

NB: if you overwrite `exports` then it will no longer refer to `module.exports`. So if you wish to assign a new object (or a function reference) to `exports` then you should also assign that new object to `module.exports`

It's worth noting that the name added to the `exports` object does not have to be the same as the module's internally scoped name for the value that you're adding, so you could have:

let myVeryLongInternalName = function() { ... };
exports.shortName = myVeryLongInternalName;
// add other objects, functions, as required

followed by:

const m = require('./mymodule');
m.shortName(); // invokes module.myVeryLongInternalName

Problem

What is the purpose of Node.js `module.exports` and how do you use it? I can't seem to find any information on this, but it appears to be a rather important part of Node.js as I often see it in source code. According to the Node.js documentation: module A reference to the current `module`. In particular `module.exports` is the same as the exports object. See `src/node.js` for more information. But this doesn't really help. What exactly does `module.exports` do, and what would a simple example be?

Original source

Related problems