A Comprehensive Guide to require() and module.exports in Node.js
Node.js is a powerful open-source JavaScript runtime environment, but one of its most empowering features is its built-in module system. This system allows developers to split their code into reusable parts. In this blog post, we will be diving deep into two key concepts of this system: require()
and module.exports
.
Understanding Node.js Modules
Before we delve into the specifics, it's essential to understand what modules are in Node.js. A module is a discrete program, gathered into a single or multiple JavaScript files, that logically divides the code into a reusable block. By packaging related pieces of code together, modules provide separation of concerns, keep the code more organized, easy to reason about, and increase reusability.
The Node.js modules system follows the CommonJS specification, which includes a simple and intuitive module loading system via require()
and module.exports
.
The Require Function
The require()
function is used to import modules in Node.js. This function reads a JavaScript file, executes the file and returns the exports
object. For example:
var http = require('http');
In the above example, we're importing the built-in http
module of Node.js using require()
function. The returned http
object can now be used to create a server, make HTTP requests, etc.
The require()
function takes a string argument representing the module's path. This can be:
-
Core module: Node.js comes with several built-in modules. When
require()
function gets a string argument that does not start with "./", "../" or "/", it assumes that this is a core module or a module installed in thenode_modules
directory. - Local module: If the argument starts with "./" or "../", Node.js interprets it as a relative or absolute path and tries to load the module from a file at that location.
-
Installed module: Node.js modules can also be installed using npm (Node Package Manager). In this case, Node.js looks for the module in the
node_modules
directory.
The module.exports
The module.exports
or simply exports
is a special object which is included in every JavaScript file in the Node.js application by default. module
is a variable that represents the module itself and exports is an object that will be exposed as a module.
You can add functions or objects to module.exports
to make them available for other modules to require()
. Here's an example:
module.exports = { sayHello: function() { return 'Hello, world!'; } };
In the above example, sayHello
function is attached to module.exports
. Now, this function can be used in another file as follows:
var hello = require('./hello'); console.log(hello.sayHello()); // Outputs "Hello, world!"
Using Require and Module.exports Together
Let's create a simple example to understand how require()
and module.exports
work together.
Let's create a file math.js
with the following code:
var math = { add: function(x, y) { return x + y; }, subtract: function(x, y) { return x - y; } }; module.exports = math;
Now, let's create another file app.js
:
var math = require('./math'); console.log(math.add(5, 3)); // Outputs 8 console.log(math.subtract(5, 3)); // Outputs 2
In the example above, we created a module math
with add
and subtract
methods and exported it using module.exports
. Then, we imported it in app.js
using require()
and used the methods exported by math
.
FAQs
Q1. Can I export multiple modules in Node.js?
Yes, you can export multiple modules by adding them to the exports
object as properties.
Q2. What is the difference between exports
and module.exports
?
exports
is just a reference to module.exports
. If you assign a new value to exports
, it won't affect module.exports
. But if you add properties to exports
, they will be reflected in module.exports
as well.
Q3. Can I require local files without specifying a relative path?
No, you must always specify the path to local files. If you don't, Node.js will assume that it's a core module or a module installed in the node_modules
directory.
Q4. Can I use import
and export
instead of require()
and module.exports
in Node.js?
As of Node.js 12, you can use ECMAScript modules and the import
/export
syntax. However, it's still experimental and not recommended for production use.
For further understanding, please refer to the official Node.js documentation here.
Understanding require()
and module.exports
is fundamental to mastering Node.js, and I hope this blog post has illuminated their usage and how they work together. Happy coding!
Sharing is caring
Did you like what Sarthak Jain wrote? Thank them for their work by sharing it on social media.
No comments so far
Curious about this topic? Continue your journey with these coding courses: