How JavaScript Modules Work: ES6 Modules and CommonJS

Two primary module systems exist in JavaScript: (ECMAScript Modules or ESM) ES6 Modules and Common JS (CJS). Understanding their differences helps developers choose the right approach for their projects. JavaScript modules allow developers to break code into separate files for better organization, reusability, and maintainability.

ES6 Modules (ECMAScript Modules – ESM)

Introduced in ES6 (2015), ES6 modules provide a standardized way to work with modules in modern JavaScript. They are designed for browsers and Node.js (with some configurations).

Key Features of ES6 Modules:

– Static Imports & Exports: Modules are statically analyzed for better optimization.
– File-Based: Each module is a separate file, loaded via `import` and `export` keywords.
– Supports Asynchronous Loading: Works efficiently in browsers with `<script type=”module”>`.
– Strict Mode by Default: ES6 modules automatically enforce JavaScript’s strict mode.

Example of ES6 Modules

Exporting from a module (`math.js`):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
javascript
export function add(a, b) {
return a + b;
}
export const PI = 3.1416;
javascript export function add(a, b) { return a + b; } export const PI = 3.1416;
javascript
export function add(a, b) {
    return a + b;
}
export const PI = 3.1416;

Importing in another file (`main.js`):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
javascript
import { add, PI } from './math.js';
console.log(add(2, 3)); // Output: 5
console.log(PI); // Output: 3.1416
javascript import { add, PI } from './math.js'; console.log(add(2, 3)); // Output: 5 console.log(PI); // Output: 3.1416
javascript
import { add, PI } from './math.js';
console.log(add(2, 3)); // Output: 5
console.log(PI); // Output: 3.1416

Default Export Example:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
javascript
export default function subtract(a, b) {
return a - b;
}
javascript export default function subtract(a, b) { return a - b; }
javascript
export default function subtract(a, b) {
    return a - b;
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
javascript
import subtract from './math.js';
console.log(subtract(5, 2)); // Output: 3
javascript import subtract from './math.js'; console.log(subtract(5, 2)); // Output: 3
javascript
import subtract from './math.js';
console.log(subtract(5, 2)); // Output: 3

CommonJS (CJS)

CommonJS was designed for server-side JavaScript, particularly in Node.js. It is widely used but does not natively support browsers.

Key Features of CommonJS:

– Synchronous Loading: Modules are loaded synchronously.
– File-based: Uses `require` and `module.exports` for importing and exporting.
– Does Not Support Tree Shaking: Cannot optimize unused code during bundling.

Example of CommonJS Modules

Exporting in CommonJS (`math.js`):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
javascript
module.exports = {
add: function(a, b) {
return a + b;
},
PI: 3.1416
};
javascript module.exports = { add: function(a, b) { return a + b; }, PI: 3.1416 };
javascript
module.exports = {
    add: function(a, b) {
        return a + b;
    },
    PI: 3.1416
};

Importing in another file (`main.js`):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
javascript
const math = require('./math');
console.log(math.add(2, 3)); // Output: 5
console.log(math.PI); // Output: 3.1416
javascript const math = require('./math'); console.log(math.add(2, 3)); // Output: 5 console.log(math.PI); // Output: 3.1416
javascript
const math = require('./math');
console.log(math.add(2, 3)); // Output: 5
console.log(math.PI); // Output: 3.1416

ES6 Modules vs. CommonJS: Key Differences

FeatureES6 Modules (ESM)      CommonJS (CJS) 
Syntax`import`/`export``require`/`module.exports`
Execution ModelAsynchronousSynchronous
Browser SupportYes (with `<script type=”module”>`)No (requires bundlers like Webpack)
Tree ShakingYesNo
Default ExportsSupportedSupported
Used InModern JavaScript, Browsers, Node.js (with `.mjs` or `”type”: “module”`)Node.js

 

Which One Should You Use?

– For Browser Development: Use ES6 Modules.
– For Modern Node.js Projects: Use ES6 Modules, but ensure your `package.json` includes `”type”: “module”`.
– For Older Node.js Projects: Stick to CommonJS.
– For Compatibility: Using transpilers like Babel or bundlers like Webpack if supporting both environments.

Conclusion

Both ES6 modules and CommonJS serve different purposes. While ES6 modules are the modern standard with better performance and browser compatibility, CommonJS remains widely used in Node.js. Choosing the right module system depends on your project requirements and environment.

Read Also:
Optimizing JavaScript for Performance and Faster Load Times

PHP 8 Features and How They Improve Development

Also Read

https://inimisttech.com/

 

Leave a Reply