Skip to content

Nuxt Prerendering silently stalls on 2.1.0, build exits 0, no .output/server #2297

Description

@lucpotage

Environment

  • Nuxt: 4.5.1
  • @nuxt/image: 2.0.0 ✅ / 2.1.0 ❌
  • nitropack: 2.13.4 (identical in both cases)
  • Node: 24.18.1
  • Package manager: pnpm
  • OS: macOS (darwin arm64)

Prepared with Claude Code

Reproduction

Large statically-generated site (thousands of prerendered routes, several hundred
<NuxtImg>//_ipx/... routes), built with nitro.static: true (also reproduces
with an explicit prerender route list, not just crawlLinks).

With @nuxt/image@2.1.0, the prerender log stops mid-run with no error, and the
process exits 0:

[nitro]   ├─ /_ipx/_/some-image.png (7ms)
<no further output — exit code 0>
  • Prerendered N routes in Xs is never printed
  • .output/server/ is never created (build() never runs)
  • Deterministic: stops after the same number of routes on every run

Configuration that works

"@nuxt/image": "2.0.0"

→ prerender completes, .output/server/ is built normally:

[nitro] ℹ Prerendered N routes in Xs
[nitro] ✔ Nuxt Nitro server built

Configuration that does NOT work

"@nuxt/image": "2.1.0"

→ prerender silently stalls partway through, .output/server/ is missing. Every
other dependency and all config was kept byte-identical between the two runs.

Expected behavior

The build should either complete, or fail loudly (non-zero exit code / error).

Actual behavior

The build hangs and exits 0 as if it succeeded, producing an incomplete
.output/ with no server — CI reports green on a broken build.

Additional notes (suspected cause)

Diffing 2.0.0...2.1.0, the only prerender/IPX-relevant change is src/runtime/server/routes/_ipx.ts switching from ipx@^3.1.1's native H3 handler (createIPXH3Handler) to ipx@4.0.0-beta.1's createIPXNodeHandler, bridged through h3's fromNodeMiddleware. ipx v4's rewrite also dropped the try/catch that used to guarantee every request settled in v3. Nitro's prerender queue has no per-route timeout, so a request that never settles hangs the whole crawl silently — which matches what we see exactly.

ipx@4.0.0-beta.1 is still the latest ipx release (main is only 2 README commits ahead of that tag), so this isn't already fixed upstream.

Workaround: pin @nuxt/image to 2.0.0.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions