Estos son los dos sistemas de módulos de JavaScript para dividir el código en varios archivos.
ES Modules (ESM) — el estándar moderno
// import / export, used in browsers and modern Node
import { sum } ;
defaultThing ;
x = ;
() {};
Estos son los dos sistemas de módulos de JavaScript para dividir el código en varios archivos.
// import / export, used in browsers and modern Node
import { sum } ;
defaultThing ;
x = ;
() {};
const { sum } = require("./math");
module.exports = { x: 1 };
| ES Modules | CommonJS | |
|---|---|---|
| Sintaxis | import/export | require/module.exports |
| Carga | estática, asíncrona | dinámica, síncrona |
| Analizable | ✅ → tree-shaking | ❌ más difícil |
| Bindings | en vivo (solo lectura) | un valor copiado |
this en el nivel superior | undefined | module.exports |
Estático significa que los imports de ESM se conocen en tiempo de parseo, lo que permite a los bundlers hacer tree-shaking (eliminar exports no usados). El require de CommonJS es dinámico (puedes hacer require de forma condicional), por lo que no se puede analizar con la misma facilidad.
{ "type": "module" } // in package.json, or use the .mjs extension
No puedes hacer require() de un paquete exclusivo de ESM desde CommonJS; mezclar ambos tiene asperezas. Los imports de ESM son además live bindings — si quien exporta cambia el valor, quienes importan ven el nuevo valor (CJS te da una copia instantánea).
ESM es el futuro (nativo del navegador, compatible con tree-shaking, con top-level await).
Prefiérelo para código nuevo; entiende CJS porque gran parte del ecosistema de Node todavía lo usa.