Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Node muestra ERR_REQUIRE_ESM? Rastrea al llamador real antes de cambiar módulos

El código fuente puede usar import mientras el JavaScript emitido, una dependencia o el ejecutor de pruebas sigue llamando require(). Demuestra el límite y elige migración ESM, import dinámico o una versión temporal revisada.

Ilustración original que sigue el módulo desde fuente y salida hasta metadatos y Node.
Ilustración original: sigue la ruta antes de cambiar la configuración global. Watch at Ease

ERR_REQUIRE_ESM identifica un límite de formato en ejecución. TypeScript, Babel, Vite, Electron, Jest o una dependencia transitiva pueden generar require(), así que la línea ejecutada puede no ser la escrita.

Conserva el primer stack, la versión exacta de Node y el JavaScript ejecutado antes de editar package.json.

Conserva la evidencia de ejecución

Guarda stack, comando, directorio, versiones de Node y gestor, y revisión del lockfile; marca el ESM objetivo y el primer llamador propio.

No borres primero node_modules ni lockfile: cambiarías el grafo y perderías el límite original.

Inspecciona lo que realmente se ejecutó

Abre el archivo citado en dist, out, build o el bundle de Electron y comprueba si la salida aún usa require().

Registra module, moduleResolution, extensión y el type del package.json más cercano.

Mapea el límite y su propietario

Usa lockfile y árbol para fijar versión y decidir si la llamada pertenece a tu código, una dependencia directa o transitiva; lee exports y type.

Registra Node. Una regresión del runtime o top-level await exige otra solución que una actualización ESM-only.

Elige una sola reparación

Si puedes migrar, cambia juntos límite, salida, extensiones relativas y entrada. Si conservas CommonJS, usa dynamic import solo en un límite propio que pueda ser asíncrono.

Si falla una dependencia, prefiere una versión superior compatible. Una fijación temporal necesita motivo, riesgo y fecha de retirada.

Verifica en el mismo límite

Limpia la salida antigua y recompila sin reescribir el lockfile; confirma que desaparece require o que el puente devuelve el export correcto.

Ejecuta comando, pruebas y entrada de producción con el mismo Node; conserva árbol y fragmento emitido.

Ilustración original con tres rutas de reparación hacia una verificación común.
Ilustración original: demuestra el límite antes de migrar, enlazar o fijar. Watch at Ease