-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
- Review the documentation: https://docs.sentry.io/
- Search for existing issues: https://github.com/getsentry/sentry-javascript/issues
- Use the latest release: https://github.com/getsentry/sentry-javascript/releases
- Provide a link to the affected event from your Sentry account
Package + Version
-
@sentry/nextjs
Version:
6.7.1
Description
When using @sentry/nextjs in a @nrwl/nx monorepo workspace environment, the output path is applied to .env.local file relative to the "application" path, which resolves to this in development environment (as dist folder is in workspace root but app source is in apps/<app-name> directory):
SENTRY_SERVER_INIT_PATH=..\..\dist\apps\<app-name>\.next\server\sentry\initServerSDK.js
Which is correct as it gets the output from the webpack config. But in the nx workspace environment, the serve and build commands must be executed from the workspace root and not the next app root, so this relative path becomes wrong for both the development server and the production build pipeline (as in most cases only the built artifacts are cloned over).
So this error is thrown:
[Sentry] Could not initialize SDK. Received error:
Error: Cannot find module 'C:\Users\<username>\Desktop\dist\apps\<app-name>\.next\server\sentry\initServerSDK.js'
Require stack:
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@sentry\nextjs\dist\utils\instrumentServer.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@sentry\nextjs\dist\index.server.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\apps\promocodes.com\next.config.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\next\dist\next-server\server\config.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@nrwl\next\src\utils\config.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@nrwl\next\src\executors\server\server.impl.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@nrwl\tao\src\shared\workspace.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@nrwl\tao\src\commands\run.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@nrwl\tao\index.js
- C:\Users\<username>\Desktop\Dev\<workspace-name>\node_modules\@nrwl\cli\lib\run-cli.js
Note: I have also tried providing this environment variable in the next.config.js, it still defaults to loading the .env.local file, which gets overwritten on every serve or build command execution.
Proposed Solution
I confirmed if I run a production server after removing the double back directories from .env.local file, the SDK boots up correctly and is initialized. So I could probably get around this in the CI pipeline by monkey patching the file, or just adding a DefinePlugin for that env variable to the nextjs webpack config, but that would not be a very good solution. As for my proposed solution, there should be an option to define SENTRY_SERVER_INIT_PATH with it defaulting to self-overwriting .env.local as the @sentry/nextjs config does at the moment.