require(esm)

JavaScript 🟡 Mid

Définition

Capacité de Node.js à charger un module ESM depuis CommonJS avec require(). Ajoutée en 22.0.0 et 20.17.0 derrière un drapeau, activée par défaut en 22.12.0 et 20.19.0, elle est stable depuis 25.4.0. Condition : le module ESM ne doit pas contenir de top-level await (sinon ERR_REQUIRE_ASYNC_MODULE). TypeScript 5.8 (28 février 2025) la modélise avec --module nodenext.

Analogie

Une porte enfin percée entre deux immeubles mitoyens : on passe d'un côté à l'autre sans faire le tour du pâté de maisons.

Exemple de code

// utils.mjs
export function slug(s) { return s.toLowerCase().replace(/\s+/g, '-'); }

// legacy.cjs — Node 22.12+/20.19+
const { slug } = require('./utils.mjs');
console.log(slug('Hello World')); // hello-world
// Détection : process.features.require_module === true
// Diagnostic d'un TLA bloquant : --experimental-print-required-tla

Cas d'usage

Consommer une dépendance publiée en ESM seul depuis une base CommonJS ; simplifier la publication des bibliothèques.

Anti-pattern

Ajouter un top-level await dans un module destiné à être requis : il devient inaccessible à require().
#core#modules#node22#node25

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre