Node.js supports two types of modules: CommonJS and ES modules. While CommonJS is the traditional module system used by Node.js, ES modules are a newer standard that provides a more modern way of organizing and importing code.
In this tutorial, we will explore how to use ES modules in Node.js, including how to enable them, import and export modules, and mix them with CommonJS modules.
Enabling ES Modules
To use ES modules in Node.js, you need to enable them by adding a type
field to your package.json
file:
{
"name": "my-app",
"version": "0.0.0",
"type": "module",
"scripts": {
// ...
}
}
Alternatively, you can use the .mjs
extension for your JavaScript files to indicate that they are ES modules.
Importing and Exporting Modules
In ES modules, you can import modules using the import
statement:
import { startServer } from './server.mjs';
startServer();
You can also export modules using the export
statement:
// server.mjs
export function startServer() {
// ...
}
Note that ES modules are more strict than CommonJS modules, and you need to use the import
statement at the top level of your module.
Mixing ES Modules with CommonJS
If you have existing code that uses CommonJS modules, you can still use them alongside ES modules. However, keep in mind that ES modules are not compatible with CommonJS modules, so you cannot import a CommonJS module using the import
statement.
To mix both types of modules, you can use the createRequire
function from the module
module to create a require
function that works with ES modules:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
You can then use this require
function to import CommonJS modules.
Best Practices
Here are some best practices to keep in mind when using ES modules:
- Use the
.mjs
extension for your JavaScript files to indicate that they are ES modules. - Use the
import
statement at the top level of your module. - Avoid mixing ES modules with CommonJS modules unless necessary.
- Use a consistent naming convention for your modules.
Conclusion
In this tutorial, we have learned how to use ES modules in Node.js, including how to enable them, import and export modules, and mix them with CommonJS modules. By following the best practices outlined above, you can take advantage of the benefits of ES modules and write more modern and maintainable code.
Example Use Case
Here is an example of a simple server that uses ES modules:
// server.mjs
import { createServer } from 'http';
export function startServer() {
const server = createServer((req, res) => {
res.writeHead(200);
res.end('Hello World!');
});
server.listen(3000, () => {
console.log('Server started on port 3000');
});
}
// index.mjs
import { startServer } from './server.mjs';
startServer();
You can run this example using Node.js:
node index.mjs
This will start the server and listen for incoming requests.