ESM (ES Modules)
Il sistema di moduli nativo di JavaScript, con sintassi import / export. Standardizzato in ES2015 (ES6), supportato dai browser dal 2018 e stabile in Node.js dal 2020. Nelle basi di codice moderne sostituisce CommonJS (require).
Nel browser: <script type="module" src="app.js">, e gli import sono gestiti senza bundler. In Node.js: "type": "module" in package.json oppure l'estensione .mjs. Favorisce il tree-shaking, perché l'analisi statica può rimuovere gli import inutilizzati. Supporta il top-level await. L'interoperabilità con CommonJS è insidiosa (confusione sugli export predefiniti). La migrazione è dolorosa: le basi di codice CJS esistenti (Express, molti middleware) non sono del tutto compatibili con ESM. Bun e Deno sono runtime nativamente ESM. Tendenza 2024: i nuovi pacchetti pubblicano sia ESM sia CJS, e "solo ESM" è ormai accettabile per chi scrive librerie.