CommonJS fue el primer sistema de módulos de Node.js y cumplió su misión durante más de una década. Pero el lenguaje JavaScript evolucionó, y en 2015 llegó una forma nativa de manejar módulos: ES Modules (o ESM).
La diferencia principal es la sintaxis:
| CommonJS | ES Modules |
|---|---|
require("...") | import ... from "..." |
module.exports | export |
Si has trabajado con React, Vue o cualquier framework moderno, ya has visto import y export. Esa es la sintaxis ESM.
Para que Node.js entienda import y export en archivos .js, necesitas indicarlo en tu package.json:
Sin esa línea, Node asume que usas CommonJS y import dará un error. Es el interruptor que le dice a Node: "este proyecto usa módulos modernos".
package.jsonutils.js — exportar con exportindex.js — importar con importObserva un detalle importante: en ESM, la extensión .js en el import es obligatoria. En CommonJS podías omitirla, pero aquí no.
ESM tiene dos formas de exportar:
Export con nombre (puedes tener varios):
Export default (solo uno por archivo):
El import cambia según cuál uses:
La regla general es simple:
"type": "module")La industria se está moviendo hacia ESM, pero la transición es gradual. Por eso es importante conocer ambos sistemas — en tu carrera te encontrarás con los dos.
"type": "module" en package.jsonutils.js, exporta una función usando exportindex.js, impórtala con import ... from "./utils.js"console.lognode index.js en la terminalAhora dominas las dos caras de los módulos en Node.js. Puedes trabajar en cualquier proyecto, sea legacy o moderno.