sentry-javascript: Crash on server side running on Vercel after upgrading to Next.js 12

Package + Version

  • @sentry/browser
  • @sentry/node
  • raven-js
  • raven-node (raven for node)
  • other: @sentry/nextjs

Version:

6.13.3

Description

After upgrading a project from Next 11.1.2 to 12.0.1, the Next.js-powered API endpoints start to crash, as in https://drafted-webapp-hmopbeh9f-davidguijarro.vercel.app/api/status.

Here’s a sample log of the error:

[GET] /api/status
09:32:11:52
2021-10-29T07:32:12.548Z	1c5c0769-4fd8-4480-8b9a-08598598cd1f	ERROR	Error: Cannot find module './browser'
Require stack:
- /var/task/node_modules/@sentry/tracing/dist/index.js
- /var/task/node_modules/@sentry/node/dist/handlers.js
- /var/task/node_modules/@sentry/node/dist/index.js
- /var/task/node_modules/@sentry/nextjs/dist/index.server.js
- /var/task/.next/server/pages/api/status.js
- /var/task/node_modules/next/dist/server/next-server.js
- /var/task/___next_launcher.js
- /var/runtime/UserFunction.js
- /var/runtime/index.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15)
    at Function.Module._load (internal/modules/cjs/loader.js:745:27)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at require (internal/modules/cjs/helpers.js:92:18)
    at Object.<anonymous> (/var/task/node_modules/@sentry/tracing/dist/index.js:3:17)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/var/task/node_modules/@sentry/tracing/dist/index.js',
    '/var/task/node_modules/@sentry/node/dist/handlers.js',
    '/var/task/node_modules/@sentry/node/dist/index.js',
    '/var/task/node_modules/@sentry/nextjs/dist/index.server.js',
    '/var/task/.next/server/pages/api/status.js',
    '/var/task/node_modules/next/dist/server/next-server.js',
    '/var/task/___next_launcher.js',
    '/var/runtime/UserFunction.js',
    '/var/runtime/index.js'
  ]
}
RequestId: 1c5c0769-4fd8-4480-8b9a-08598598cd1f Error: Runtime exited with error: exit status 1
Runtime.ExitError

Weird enough, this only happens when deployed to Vercel, not when running on local.

I also confirmed that completely removing Sentry from the project solves the issue.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 46
  • Comments: 18 (2 by maintainers)

Commits related to this issue

Most upvoted comments

Current workaround is to add outputFileTracing: false to the root of your next.config.js

that will probably lead to larger artifact, but solves the issue.

output-file-tracing

outputFileTracing: false does not work for me. And my crash condition is somewhat different, it crashes on SSR pages only.

What’s odd to me is next build ; next start works on the same SSR pages that crash when only deployed on Vercel previews. Local dev build also works fine.

Would love to have @sentry/nextjs compatible with Next 12, as this is a pretty major blocker for Next + Sentry.

I just upgraded to @sentry/nextjs@6.15.0 and next@12.0.4. This issue still occurs:

ERROR	Error: Cannot find module '/var/task/node_modules/next/dist/server/next.js'. Please verify that the package.json has a valid "main" entry
    at tryPackage (internal/modules/cjs/loader.js:321:19)
    at Function.Module._findPath (internal/modules/cjs/loader.js:534:18)
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:888:27)
    at Function.Module._load (internal/modules/cjs/loader.js:746:27)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Object.<anonymous> (/var/task/node_modules/@sentry/nextjs/dist/utils/instrumentServer.js:8:14)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32) {  code: 'MODULE_NOT_FOUND',  path: '/var/task/node_modules/next/package.json',  requestPath: 'next'}

I believe #4027 is a separate issue to this. A comment from the Next.js maintainer seems to indicate that this issue is caused by Sentry importing a reference to next, which is disallowed on Vercel since it would increase the bundle size. I’m not sure why it can’t be tree-shaked (Seems like there isn’t any additional bundling done, and the full module is imported). Since the instrumentServer function directly modifies internals in the Next.js server, it might be good to communicate directly with the Next.js team to figure out a solution, since this seems to be a major blocker to Sentry + Next.js adoption on Vercel.

The workaround of outputFileTracing is also not a feasible long-term solution, since it severely increases the bundle size of all Next.js pages (~1.6x in my case).

Upgrading to 6.5.0 and setting outputFileTracing: false has worked for me

@IGUNUBLUE Yep, at least that is my current workaround.

Edit: These are related to Sentry and Next.js but not to the issue discussed here. Sorry, I got that mixed up.

Yes there are two open PRs at the moment:

Just adding a quick message as I stumbled on this error with using nx, sentry and next. I read too quickly the documentation and missed this part :

Make sure to add the Sentry config last; otherwise, the source maps the plugin receives may not be final.

If withSentryConfig is not the last function to applied, nextJS bundling will not work (Cannot find module '@sentry/nextjs'):

module.exports = withSentryConfig(withNx(baseOptions), {
  silent: true,
});

getting this too. will this issue track a proper fix?