Node.js6 min read

ES Modules in Node.js (import/export)

Learn modern ES modules syntax with import and export in Node.js. Understand the difference from CommonJS.

Sarah Chen
December 19, 2025
0.0k0

ES Modules in Node.js

ES Modules (ESM) is the modern JavaScript module system. Node.js supports it fully.

Enabling ES Modules

Option 1: Use .mjs extension

// math.mjs
export function add(a, b) {
  return a + b;
}

Option 2: Add "type": "module" to package.json

{
  "name": "my-app",
  "type": "module"
}

Now .js files use ESM:

// math.js (with "type": "module")
export function add(a, b) {
  return a + b;
}

Named Exports

// utils.js
export function formatDate(date) {
  return date.toISOString();
}

export function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}

export const VERSION = '1.0.0';
// app.js
import { formatDate, capitalize, VERSION } from './utils.js';

console.log(capitalize('hello'));    // Hello
console.log(VERSION);                // 1.0.0

Default Export

// User.js
export default class User {
  constructor(name) {
    this.name = name;
  }
}
// app.js
import User from './User.js';  // No curly braces

const user = new User('Alice');

Mixed Exports

// api.js
export default function fetchData() { /* ... */ }
export const BASE_URL = 'https://api.example.com';
export function formatResponse(data) { /* ... */ }
// app.js
import fetchData, { BASE_URL, formatResponse } from './api.js';

Import Everything

import * as utils from './utils.js';

utils.formatDate(new Date());
utils.capitalize('hello');
console.log(utils.VERSION);

CommonJS vs ES Modules

Feature CommonJS ES Modules
Syntax require/module.exports import/export
Loading Synchronous Asynchronous
File extension .js .mjs or "type": "module"
Top-level await

Importing CommonJS in ESM

// ESM file importing CommonJS
import express from 'express';  // Works!

// Named imports might not work
import { Router } from 'express';  // May fail
const { Router } = express;        // Use this instead

File Extensions Required

ESM requires full file paths:

// ❌ Won't work in ESM
import { add } from './math';

// ✅ Works
import { add } from './math.js';

Key Takeaway

ES Modules is the modern standard. Use export to share code, import to use it. Enable with "type": "module" in package.json or .mjs files. Remember to include .js extensions in imports!

#Node.js#ES Modules#import#export#Beginner