node · JavaScript
El mensaje
ReferenceError: require is not defined in ES module scope, you can use import instead
Qué significa
Este es el espejo exacto del error anterior: el archivo se lee como ESM y contiene el require de CommonJS. Ocurre casi siempre justo después de añadir "type": "module" a package.json cuando aún quedan scripts antiguos en el árbol. Para dejar ese archivo en el mundo viejo, mv script.js script.cjs es el cambio más pequeño; para migrarlo, reescribir require como import implica también resolver __dirname y require.main === module, que no existen en ESM.
El arreglo
mv script.js script.cjs- Lo imprime
- node
- JavaScript
- 15
Los errores del navegador y de Node suelen decirte qué se rompió y no por qué el valor llegó a ser así —leíste undefined, no era una función, no era JSON—, así que el lugar del arreglo está aguas arriba de la línea que lanzó el error, y silenciar solo esa línea con ?. y valores por defecto hace que el mismo problema reaparezca más lejos y con una forma más difícil de reconocer.
Cómo leer un mensaje de error
- Lee desde la primera línea. Cuanto más abajo, más son las tripas de la herramienta; la causa suele estar arriba.
- Si hay un archivo y un número de línea, empieza ahí: no el marco superior de la pila, sino la línea más alta que nombre un archivo tuyo.
- Busca el mensaje literal, pero quita antes tus rutas y nombres de variables: eso es lo que impide que la búsqueda coincida.
- La misma condición se redacta distinto según la versión. Si los resultados no cuadran, añade el número de versión.
- Antes de pegar un arreglo, comprueba qué descarta. Algunos no se pueden deshacer.
Preguntas frecuentes
Q. ¿Qué significa «ReferenceError: require is not defined in ES module scope, you can use import instead»?
Este es el espejo exacto del error anterior: el archivo se lee como ESM y contiene el require de CommonJS. Ocurre casi siempre justo después de añadir "type": "module" a package.json cuando aún quedan scripts antiguos en el árbol. Para dejar ese archivo en el mundo viejo, mv script.js script.cjs es el cambio más pequeño; para migrarlo, reescribir require como import implica también resolver __dirname y require.main === module, que no existen en ESM.
Q. ¿Cómo se arregla?
mv script.js script.cjs — antes de ejecutarlo, mira arriba qué descarta este comando.
Q. ¿Qué herramienta lo imprime?
node. Está en JavaScript y el mensaje tiene 14 palabras.