Skip to content

Nuxt dev server loads DB drivers before Sentry.init() #23876

Description

@chargome

In nuxt dev, ioredis and mysql never get DB spans. The SDK starts fine and http.server transactions arrive, but the DB spans are missing.

It's a load-order problem. Nitro generates .nuxt/dev/sentry.server.config.mjs, the file nuxt dev passes to --import, as a list of imports for the whole dev server:

import './index.mjs';   // the whole Nitro dev server
// … a few more imports …
import '…/node_modules/ioredis/built/index.js';
import '…/node_modules/mysql/index.js';
// … more imports, then Sentry.init() somewhere inside

ESM runs all imports before any code, so both drivers are loaded by the time Sentry.init() runs, and the runtime hook can't instrument a module that loaded first. A probe on Module.prototype._compile confirms it: when ioredis compiles, globalThis.__SENTRY_ORCHESTRION__ doesn't exist yet.

This isn't only about orchestrion. Anything that needs Sentry.init() to run before a dependency loads is unreliable in nuxt dev.

Repro: in dev-packages/e2e-tests/test-applications/nuxt-4, run bash ./nuxt-start-dev-server.bash && TEST_ENV=development playwright test db-drivers. Both tests time out; the dev pass is filtered to environment today for this reason.

Found while working on JS-3233 (#22857). Blocks the nuxt-4 dev DB tests (#23836).

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugNode.jsjavascriptPull requests that update javascript code

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions