Solución: Cannot use import statement outside a module en Node.js
Node.js lanza SyntaxError al usar import/export de ES Modules. Tres formas de solucionarlo según tu proyecto: package.json, extensión .mjs o configuración de Babel/TypeScript.
¿Por qué ocurre?
Node.js usa CommonJS (require/module.exports) por defecto. Cuando escribes `import` sin configurar el proyecto como ES Module, Node lanza este error. Ocurre al mezclar paquetes ESM con código CommonJS o al seguir tutoriales que asumen configuración distinta a la tuya.
Solución paso a paso
Opción 1 — Añadir \"type\": \"module\" en package.json (recomendado para proyectos nuevos):
{
"type": "module"
}
Con esto todos los archivos .js del proyecto se tratan como ES Modules y puedes usar import/export libremente.
⚠ Importante: al activar "type": "module" ya no puedes usar require(). Si tienes código antiguo con require, migrarlo o usa la opción 2.
Opción 2 — Renombrar el archivo a .mjs:
# Renombra tu archivo
mv index.js index.mjs
Los archivos .mjs siempre se tratan como ESM sin importar el package.json.
Opción 3 — Cambiar los import a require (si quieres seguir en CommonJS):
// ❌ ESM — falla en CommonJS
import express from 'express';
import { readFile } from 'fs';// ✅ CommonJS equivalente
const express = require('express');
const { readFile } = require('fs');
Opción 4 — Si usas TypeScript, configura tsconfig.json:
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext"
}
}
Cómo evitarlo en el futuro
Decide desde el principio si tu proyecto es ESM o CommonJS y sé consistente. Para proyectos nuevos en Node 18+, usa `"type": "module"`. Para proyectos legacy o librerías que necesiten compatibilidad máxima, quédate en CommonJS con `require`.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts