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).

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

    BugNode.jsjavascriptPull requests that update javascript code

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions