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.

