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:
|
function warnAboutMissingOnRequestErrorHandler(projectDir: string): void { |
|
const instrumentationPaths = [ |
|
['src', 'instrumentation.ts'], |
|
['src', 'instrumentation.js'], |
|
['instrumentation.ts'], |
|
['instrumentation.js'], |
|
]; |
|
const instrumentationFile = instrumentationPaths |
|
.map(pathSegments => path.resolve(projectDir, ...pathSegments)) |
|
.find(function exists(filePath: string): string | null { |
|
try { |
|
fs.accessSync(filePath, fs.constants.F_OK); |
|
return filePath; |
|
} catch (error) { |
|
return null; |
|
} |
|
}); |
|
|
|
function hasOnRequestErrorHandler(absolutePath: string): boolean { |
|
try { |
|
const content = fs.readFileSync(absolutePath, 'utf8'); |
|
return content.includes('onRequestError'); |
|
} catch (error) { |
|
return false; |
|
} |
|
} |
|
|
|
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 |
|
const pageExtensions = userNextConfig.pageExtensions || ['tsx', 'ts', 'jsx', 'js']; |
|
const dotPrefixedPageExtensions = 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