node · JavaScript
El mensaje
ReferenceError: window is not defined
Qué significa
El código se ejecutó dentro de Node en el servidor, no en un navegador. Node no tiene window, ni document, ni localStorage, así que tocar window mientras se carga un módulo en un framework que primero renderiza en servidor, como Next.js o Nuxt, se detiene aquí: a menudo es una sola línea fuera del componente, o el propio import de una biblioteca solo para navegador. Si el trabajo es solo de navegador, protégelo con typeof window !== 'undefined' o, mejor, muévelo dentro de useEffect, que solo se ejecuta en el navegador. Cuando toda una biblioteca es solo de navegador, Next.js puede excluirla del render del servidor con dynamic(() => import('./C'), { ssr: false }), a costa de que esa parte no aparezca en el HTML renderizado en servidor.
El arreglo
No hay un comando de una línea. La explicación dice qué revisar.
- 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: window is not defined»?
El código se ejecutó dentro de Node en el servidor, no en un navegador. Node no tiene window, ni document, ni localStorage, así que tocar window mientras se carga un módulo en un framework que primero renderiza en servidor, como Next.js o Nuxt, se detiene aquí: a menudo es una sola línea fuera del componente, o el propio import de una biblioteca solo para navegador. Si el trabajo es solo de navegador, protégelo con typeof window !== 'undefined' o, mejor, muévelo dentro de useEffect, que solo se ejecuta en el navegador. Cuando toda una biblioteca es solo de navegador, Next.js puede excluirla del render del servidor con dynamic(() => import('./C'), { ssr: false }), a costa de que esa parte no aparezca en el HTML renderizado en servidor.
Q. ¿Cómo se arregla?
No hay comando de una línea. La explicación de arriba dice qué revisar.
Q. ¿Qué herramienta lo imprime?
node. Está en JavaScript y el mensaje tiene 5 palabras.