Is there an existing issue for this?
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using?
@sentry/nextjs
SDK Version
9.5.0
Framework Version
next@15.2.2
Link to Sentry event
No response
Reproduction Example/SDK Setup
Sentry.init({dsn: process.env["SENTRY_DSN"]??"",enabled: Boolean(process.env["SENTRY_DSN"]),});Steps to Reproduce
Create a Next.js app
Open next.config.ts and configure pageExtensions (e.g. pageExtensions: ["page.tsx", "handler.ts"])
Create instrumentation.handler.ts or src/instrumentation.handler.ts (if .handler. suffix is specified, the file is ignored by Next.js)
Init and configure Sentry
Run pnpm dev --turbopack=false
Expected Result
No warnings (because Turbopack is off)
Actual Result
A false-positive warning:
[@sentry/nextjs] Could not find a Next.js instrumentation file. This indicates an incomplete configuration
of the Sentry SDK. An instrumentation file is required for the Sentry SDK to be initialized on the server:
https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#create-initialization-config-files
(you can suppress this warning by setting SENTRY_SUPPRESS_INSTRUMENTATION_FILE_WARNING=1
as environment variable)
Additional context
The bug originates from #15488:
| functionwarnAboutMissingOnRequestErrorHandler(projectDir: string): void{ |
| constinstrumentationPaths=[ |
| ['src','instrumentation.ts'], |
| ['src','instrumentation.js'], |
| ['instrumentation.ts'], |
| ['instrumentation.js'], |
| ]; |
| constinstrumentationFile=instrumentationPaths |
| .map(pathSegments=>path.resolve(projectDir, ...pathSegments)) |
| .find(functionexists(filePath: string): string|null{ |
| try{ |
| fs.accessSync(filePath,fs.constants.F_OK); |
| returnfilePath; |
| }catch(error){ |
| returnnull; |
| } |
| }); |
| |
| functionhasOnRequestErrorHandler(absolutePath: string): boolean{ |
| try{ |
| constcontent=fs.readFileSync(absolutePath,'utf8'); |
| returncontent.includes('onRequestError'); |
| }catch(error){ |
| returnfalse; |
| } |
| } |
| |
| if(!instrumentationFile){ |
| if(!process.env.SENTRY_SUPPRESS_INSTRUMENTATION_FILE_WARNING){ |
| // eslint-disable-next-line no-console |
| console.warn( |
| chalk.yellow( |
| '[@sentry/nextjs] Could not find a Next.js instrumentation file. This indicates an incomplete configuration of the Sentry SDK. An instrumentation file is required for the Sentry SDK to be initialized on the server: https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#create-initialization-config-files (you can suppress this warning by setting SENTRY_SUPPRESS_INSTRUMENTATION_FILE_WARNING=1 as environment variable)', |
| ), |
| ); |
| } |
| return; |
| } |
| |
| if(!hasOnRequestErrorHandler(instrumentationFile)){ |
| // eslint-disable-next-line no-console |
| console.warn( |
| chalk.yellow( |
| '[@sentry/nextjs] Could not find `onRequestError` hook in instrumentation file. This indicates outdated configuration of the Sentry SDK. Use `Sentry.captureRequestError` to instrument the `onRequestError` hook: https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#errors-from-nested-react-server-components', |
| ), |
| ); |
| } |
| } |
↑ The list of paths for instrumentation files is hard-coded so custom page extensions are not respected. It seems that the warning does not affect the actual runtime, but I’m not 100% about this.
Good news is that page extensions are already resolved in this file:
| // Default page extensions per https://github.com/vercel/next.js/blob/f1dbc9260d48c7995f6c52f8fbcc65f08e627992/packages/next/server/config-shared.ts#L161 |
| constpageExtensions=userNextConfig.pageExtensions||['tsx','ts','jsx','js']; |
| constdotPrefixedPageExtensions=pageExtensions.map(ext=>`.${ext}`); |
Is there an existing issue for this?
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using?
@sentry/nextjs
SDK Version
9.5.0
Framework Version
next@15.2.2
Link to Sentry event
No response
Reproduction Example/SDK Setup
Steps to Reproduce
Create a Next.js app
Open
next.config.tsand configurepageExtensions(e.g.pageExtensions: ["page.tsx", "handler.ts"])Create
instrumentation.handler.tsorsrc/instrumentation.handler.ts(if.handler.suffix is specified, the file is ignored by Next.js)Init and configure Sentry
Run
pnpm dev --turbopack=falseExpected Result
No warnings (because Turbopack is off)
Actual Result
A false-positive warning:
Additional context
The bug originates from #15488:
sentry-javascript/packages/nextjs/src/config/webpack.ts
Lines 452 to 499 in 48ed271
↑ The list of paths for instrumentation files is hard-coded so custom page extensions are not respected. It seems that the warning does not affect the actual runtime, but I’m not 100% about this.
Good news is that page extensions are already resolved in this file:
sentry-javascript/packages/nextjs/src/config/webpack.ts
Lines 113 to 115 in 48ed271