CommonJS vs ES Modules

Node js 8 min min read Updated: Mar 29, 2026 Beginner
CommonJS vs ES Modules
Beginner Topic 5 of 12

CommonJS vs ES Modules in Node.js

In Node.js, modules are used to organize code into reusable files. There are two main module systems used in JavaScript: CommonJS and ES Modules (ESM). Understanding the difference between these two is very important for modern JavaScript development.

CommonJS has been the default module system in Node.js for a long time, while ES Modules are the modern standard introduced in JavaScript (ES6). Today, both systems are widely used, and knowing when to use each one is a key skill for developers.

Quick Difference: CommonJS uses require() and module.exports, while ES Modules use import and export.

What is CommonJS?

CommonJS is the original module system used in Node.js. It allows you to import and export functionality between files using the require() function and module.exports.

Example of CommonJS:

javascript const fs = require("fs"); function greet(name) { return "Hello " + name; } module.exports = greet;

In this system, modules are loaded synchronously, which means the code is executed in order. This works well for server-side applications.

What are ES Modules (ESM)?

ES Modules are the official JavaScript standard for modules introduced in ES6. They use import and export syntax, which is cleaner and more modern compared to CommonJS.

Example of ES Modules:

javascript import fs from "fs"; export function greet(name) { return "Hello " + name; }

ES Modules are asynchronous and allow features like static analysis, tree shaking, and better optimization in modern applications.

Key Differences Between CommonJS and ES Modules

Feature CommonJS ES Modules
Syntax require(), module.exports import, export
Loading Synchronous Asynchronous
Default in Node.js Yes (older versions) Yes (modern versions with config)
Browser Support No Yes
Performance Optimization Limited Supports tree shaking
File Extension .js .mjs or "type": "module"

How to Use ES Modules in Node.js

To use ES Modules in Node.js, you need to enable them. You can do this in two ways:

1. Using package.json

json { "type": "module" }

2. Using .mjs Extension

Rename your file with .mjs extension to use ES Modules without changing package.json.

When to Use CommonJS

  • Working with older Node.js projects
  • Using libraries that rely on CommonJS
  • Building simple backend applications

When to Use ES Modules

  • Building modern JavaScript applications
  • Working with frontend frameworks like React
  • Using bundlers and modern tooling
  • Needing better optimization (tree shaking)

Mixing CommonJS and ES Modules

Mixing both systems can sometimes create confusion. For example, using require() inside an ES Module file may not work directly. Node.js provides some compatibility options, but it is best to stick to one module system in a project.

Real-World Example

In real-world projects:

  • Backend applications often use CommonJS
  • Frontend applications use ES Modules
  • Modern full-stack apps are moving toward ES Modules

As the JavaScript ecosystem evolves, ES Modules are becoming the standard choice for new applications.

Common Mistakes

  • Using import without enabling ES Modules
  • Mixing require() and import incorrectly
  • Forgetting to configure package.json

Conclusion

Both CommonJS and ES Modules are important in Node.js development. CommonJS is simple and widely supported, while ES Modules provide a modern and optimized approach to writing modular code.

If you are working on new projects, it is recommended to learn and use ES Modules. However, understanding CommonJS is still necessary because many existing projects depend on it.

Quick Summary: CommonJS uses require(), while ES Modules use import/export. ES Modules are modern and recommended for new applications.

Get Newsletter

Subscibe to our newsletter and we will notify you about the newest updates on Edugators