Skip to content

Commit d3e6f5c

Browse files
authored
fix(nextjs): Use env variable for build detection (#4608)
In non-Vercel-deployed nextjs apps using our SDK, we instrument the server in order to be able to capture transactions for a wider variety of incoming requests than is possible using our `withSentry` API route handler wrapper. We don't do this during build, however, because there's no server to wrap. Until now, we've been relying on the fact that child processes of the main build process were invoked by `node <path>/node_modules/jest-worker/build/workers/processChild.js` in order to recognize them as such. Recently, however, next started vendoring pre-compiled versions of more of its dependencies[1], including `jest-worker`, such that now those child process are invoked by `node <path>/node_modules/next/dist/compiled/jest-worker/processChild.js`. This broke our build detection. Rather than just switch to using the new path, this PR refactors the check to use an env variable set by the main build process, in order that the check not get fooled by any child processes spawned at runtime. (I don't actually know if that ever happens, but there's no reason it couldn't, so better to have a foolproof indicator.) [1] vercel/next.js#32742
1 parent 8e4e671 commit d3e6f5c

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

packages/nextjs/src/index.server.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,20 @@ const domain = domainModule as typeof domainModule & { active: (domainModule.Dom
2323
// During build, the main process is invoked by
2424
// `node next build`
2525
// and child processes are invoked as
26-
// `node <path>/node_modules/jest-worker/build/workers/processChild.js`,
27-
// whereas at runtime the process is invoked as
26+
// `node <path>/node_modules/.../jest-worker/processChild.js`.
27+
// The former is (obviously) easy to recognize, but the latter could happen at runtime as well. Fortunately, the main
28+
// process hits this file before any of the child processes do, so we're able to set an env variable which the child
29+
// processes can then check. During runtime, the main process is invoked as
2830
// `node next start`
2931
// or
30-
// `node /var/runtime/index.js`.
31-
const isBuild = new RegExp('build').test(process.argv.toString());
32+
// `node /var/runtime/index.js`,
33+
// so we never drop into the `if` in the first place.
34+
let isBuild = false;
35+
if (process.argv.includes('build') || process.env.SENTRY_BUILD_PHASE) {
36+
process.env.SENTRY_BUILD_PHASE = 'true';
37+
isBuild = true;
38+
}
39+
3240
const isVercel = !!process.env.VERCEL;
3341

3442
/** Inits the Sentry NextJS SDK on node. */

0 commit comments

Comments
 (0)