nuxt / nuxt/devtools

fix: Bun build failes in docker with "Export 'toNodeHandler' not found" when using Nuxt Devtools alpha.9 and @nuxt/image and special tsconfig

Open
#1,050 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
3.3k
Forks
214
Avg merge
13h 22m
Merged PRs (30d)
18

Description

🐛 The bug

Bug/Error:
I found a very specific interaction bug in @nuxt/devtools Version 4.0.0-alpha.8 and 4.0.0-alpha.9 (it doesn't happen in 4.0.0-alpha.7). This is quite an edge case.

The docker build fails at bun run build with the error:

ERROR  Export named 'toNodeHandler' not found in module '/app/node_modules/h3/dist/index.cjs'.
     at <parse> (:0)
     at processTicksAndRejections (native:7:39)

error: script "build" exited with code 1
🛠️ To reproduce

https://github.com/DragonFire7/NuxtDevToolsMinimal

🌈 Expected behavior

Minimal reproduction:
I built a minimal reproduction here: https://github.com/DragonFire7/NuxtDevToolsMinimal

  1. Clone the repository.
  2. Run docker build --no-cache .
  3. The build crashes at the bun run build step.

Expected bahavior:
No errors when running the docker build

ℹ️ Additional context

Description/Details:
The bug happens when building with Docker and Bun. It does not happen locally on my Windows machine.

It only occurs when all of the following criteria are met:

  • package.json: @nuxt/image and @nuxt/devtools (with one of the mentioned versions) are in the devDependencies. The build and postinstall scripts must also be present.
  • nuxt.config.ts: A basic config utilizing the Nitro preset for Bun.
  • tsconfig.json: This is why I call it an edge case. It only happens when the project came from Nuxt 3 and still uses the legacy Nuxt 3 tsconfig format. When updating my project's config to the new Nuxt 4 tsconfig format, everything works perfectly again.
  • Dockerfile: The Dockerfile is pretty standard and only shows the building stage, since the error already occurs there.

What I found through trial and error:

  • Without the postinstall script, the types don't seem to be generated while building, thus the tsconfig.json doesn't have any effect and the build succeeds.
  • Without @nuxt/image, no error occurs. The issue seems to be introduced by an interaction between the two modules during the build process.
  • Switching the base image from oven/bun:1-alpine to oven/bun:1-slim or oven/bun:1 didn't have any effect.

Since this is very much an edge case tied to an outdated tsconfig.json, it is low priority in my opinion. However, I wanted to report it in case it helps others searching for a solution

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Clone the linked NuxtDevToolsMinimal reproduction and run docker build --no-cache . to confirm the failure at bun run build. Compare the listed @nuxt/devtools versions and inspect package.json, nuxt.config.ts, the legacy tsconfig.json, Dockerfile, and postinstall setup. Done means the Docker build completes without the toNodeHandler export error.

Written by the indexing model from the issue text.

Assessment

Tech stack
bun, docker, nuxtjs, typescript
Domain
build-system, devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.