Tutorial: Solución al error NodeJS [ERR_REQUIRE_ESM]: Must use import to load ES Module

Cuando intentas ejecutar un módulo en Node.js, puedes encontrar el siguiente error:

[ERR_REQUIRE_ESM]: Must use import to load ES Module

Este problema ocurre porque estás intentando cargar un módulo ECMAScript (ESM) usando require(), que solo funciona con módulos CommonJS (CJS). Aquí te mostramos cómo solucionarlo.


Método 1: Usar import en lugar de require (Recomendado)

Si tu código usa require() para importar un módulo ESM, cámbialo por import.

✍ Ejemplo de conversión

Cambia esto:

const paquete = require(‘paquete-esm’);

Por esto:

import paquete from 'paquete-esm';

❗ Nota: Para usar import, asegúrate de que el archivo tenga la extensión .mjs o que package.json especifique el tipo de módulo (ver Método 2).


Método 2: Declarar tu proyecto como módulo en package.json

Si quieres usar import en archivos .js sin cambiar su extensión a .mjs, agrega esta línea en tu package.json:

{
"type": "module"
}

Esto le indica a Node.js que todos los archivos .js deben tratarse como módulos ECMAScript (ESM).


Método 3: Usar createRequire para mantener require()

Si necesitas seguir usando require() en un entorno ESM, usa createRequire de Node.js:

import { createRequire } from 'module';
const require = createRequire(import.meta.url);

const paquete = require('paquete-esm');

Esto te permite importar módulos CommonJS en un entorno ECMAScript.


Método 4: Verificar la compatibilidad del paquete

Algunos paquetes solo funcionan en ESM o CommonJS, por lo que es importante verificar su compatibilidad.

  1. Revisa la documentación del paquete en NPM.
  2. Si el paquete solo soporta ESM, usa import y convierte tu código a módulos ECMAScript.
  3. Si el paquete solo soporta CommonJS, mantén require().

Consejos adicionales

✅ Usa import() dinámico si necesitas cargar módulos ESM en un entorno CommonJS:

async function cargarPaquete() {
const paquete = await import('paquete-esm');
}

✅ Si el error ocurre en un framework (Next.js, Vue, etc.), revisa su configuración de compatibilidad con ESM.
✅ Si usas TypeScript, verifica que tsconfig.json tenga "module": "ESNext" o "module": "CommonJS" según corresponda.


Si aún tienes dudas, puedes crear un ticket en el siguiente enlace:
Soporte Técnico

Scroll al inicio