gatsbyjs/gatsby · critical
There was an error compiling the html.js component for the…
Error message
There was an error compiling the html.js component for the development server.
See our docs page on debugging HTML builds for help https://gatsby.dev/debug-html What it means
The WebpackError branch of the html.js build catch in start-server. When `doBuildPages(... Stage.DevelopHTML)` throws an error whose `name` is `WebpackError`, Gatsby wraps it in a friendly panic pointing at the html.js component and the debug-html docs. This means Webpack failed to compile the HTML bundle for the dev server.
Solutions
- Follow https://gatsby.dev/debug-html and read the WebpackError detail above the panic line.
- Fix the referenced module/import (install it, correct the path, or move it out of SSR).
- Guard Node-only imports so they do not run during develop-HTML (use `typeof window !== 'undefined'` or dynamic imports).
- `gatsby clean` after fixing to clear the stale html bundle.
- Disable SSR (`GATSBY_EXPERIMENTAL_DEV_SSR` off) as a temporary workaround if the page works in pure client develop.
Example fix
// before (gatsby-ssr.js)
import fs from "fs"
// after — keep Node built-ins out of SSR
const fs = typeof require !== "undefined" ? require("fs") : null Defensive patterns
Strategy: try-catch
Type guard
function isWebpackError(err) {
return err != null && err.name === 'WebpackError'
} Try / catch
// Catch WebpackError specifically to render the debug-html guidance.
try {
await doBuildPages(rendererPath, ['/'], activity, workerPool, Stage.DevelopHTML)
} catch (err) {
if (isWebpackError(err)) {
console.error('There was an error compiling html.js. See https://gatsby.dev/debug-html')
}
throw err
} Prevention
- Guard Node-only imports in SSR with typeof-window checks or dynamic imports.
- Ensure all imports resolve (run the build locally before pushing to CI).
- Keep loaders and asset imports consistent between browser and SSR builds.
- Disable GATSBY_EXPERIMENTAL_DEV_SSR during SSR debugging to isolate client vs server paths.
When it happens
Trigger: Webpack emits a `WebpackError` while compiling the develop-HTML bundle — module not found, syntax error in a component reached during SSR, import of a Node-only module in browser code, or a loader failure in the html build.
Common situations: An import error in gatsby-ssr.js or in a page/component rendered during SSR; importing a CSS/asset without the right loader; importing `fs`/other Node built-ins into client SSR code; a dependency that does not export an ESM/CJS shape Webpack expects.
Related errors
- ${err}
- Loading indicator should never be imported in code that…
- Missing compiler
- Missing required params
- page not found
AI-assisted analysis of gatsbyjs/gatsby@8b06340921 (2026-08-13).
Data as JSON: /api/errors/57fa9ffd9b76cecd.
Report an issue: GitHub.
Appendix: source
Thrown at packages/gatsby/src/utils/start-server.ts:113
program,
Stage.DevelopHTML,
activity.span
)
await doBuildPages(
rendererPath,
[`/`],
activity,
workerPool,
Stage.DevelopHTML
)
// close the compiler
await close()
} catch (err) {
if (err.name !== `WebpackError`) {
report.panic(err)
return
}
report.panic(
report.stripIndent`
There was an error compiling the html.js component for the development server.
See our docs page on debugging HTML builds for help https://gatsby.dev/debug-html
`,
err
)
}
}
const indexHTMLActivity = report.phantomActivity(`building index.html`, {})
let pageRenderer: string
if (process.env.GATSBY_EXPERIMENTAL_DEV_SSR) {
const { buildRenderer } = require(`../commands/build-html`)
pageRenderer = (await buildRenderer(program, Stage.DevelopHTML))
.rendererPath
const { initDevWorkerPool } = require(`./dev-ssr/render-dev-html`)
initDevWorkerPool()
} else {View on GitHub (pinned to 8b06340921)