Featured image of post Interoperabilidad ESM y CJS en Node.jsFeatured image of post Interoperabilidad ESM y CJS en Node.js

Interoperabilidad ESM y CJS en Node.js

Learn ESM / CJS module boundary interop, understanding paths, exports syntax, and import.meta differences.

Node.js soporta dos sistemas de módulos: CommonJS (require) y ES Modules (import). La interoperabilidad entre ambos tiene reglas específicas.

Detección del tipo de módulo

.mjs siempre ESM. .cjs siempre CJS. .js depende del package.json más cercano: "type": "module" para ESM, "type": "commonjs" o sin campo para CJS.

Importar CJS desde ESM

Los módulos CJS se importan con import desde ESM. Node.js envuelve module.exports como default export. Named exports requieren análisis estático limitado.

Require ESM desde CJS

No es posible directamente. Usa import() dinámico desde CJS: const mod = await import('esm-module'). Requiere async context.

Migración gradual

Renombra archivos a .mjs. Añade "type": "module" al package.json. Cambia require por import. Usa import.meta.url en lugar de __dirname.