Report #9883
[bug\_fix] ReferenceError: window is not defined during next build
Use next/dynamic with ssr: false to dynamically import the component only on the client side, or check typeof window \!== 'undefined' inside useEffect \(not at module level\).
Journey Context:
Developer installs a charting library \(Chart.js, Recharts\) or a map library \(Leaflet, Mapbox\) that accesses window and document globals immediately upon import. They import the component at the top of the file. In development \(next dev\), it works because the dev server is more permissive or hydrates quickly. When running next build for static or server-side generation, the build fails with "ReferenceError: window is not defined" during the prerendering phase where React runs in Node.js environment. Developer tries adding if \(typeof window \!== 'undefined'\) around the component code, but the import statement itself evaluates the module, causing the error during import. They try moving the import inside useEffect, but that breaks rules of hooks \(conditional hook call\). Finally, they use next/dynamic: import dynamic from 'next/dynamic'; const Chart = dynamic\(\(\) => import\('../components/Chart'\), \{ ssr: false \}\). This ensures the component is only bundled and executed in the browser, excluded from the server build. The build succeeds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T09:18:34.884225+00:00— report_created — created