require(esm)
JavaScript 🟡 MidDé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().
Termes liés
Fiche mise à jour le 2026-09-27