diff --git a/packages/nextjs/src/config/types.ts b/packages/nextjs/src/config/types.ts index b577268f41cb..89f2d3f57e33 100644 --- a/packages/nextjs/src/config/types.ts +++ b/packages/nextjs/src/config/types.ts @@ -42,6 +42,9 @@ export type WebpackConfigObject = { output: { filename: string; path: string }; target: string; context: string; + resolve?: { + alias?: { [key: string]: string | boolean }; + }; } & { // other webpack options [key: string]: unknown; diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index cc1ee7f2898e..76dd5a8382da 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -60,6 +60,24 @@ export function constructWebpackConfigFunction( const origEntryProperty = newConfig.entry; newConfig.entry = async () => addSentryToEntryProperty(origEntryProperty, buildContext); + // In webpack 5, you can get webpack to replace any module you'd like with an empty object, just by setting its + // `resolve.alias` value to `false`. Not much of our code is neatly separated into "things node needs" and "things + // the browser needs," but where it is, we can save ~1.6 kb in eventual bundle size by excluding code we know we + // don't need. (Normally this would only matter for the client side, but because vercel turns backend code into + // serverless functions, it's worthwhile to do it for both.) + if (buildContext.webpack.version.startsWith('5')) { + const excludedTracingDir = buildContext.isServer ? 'browser' : 'integrations/node'; + newConfig.resolve = { + ...newConfig.resolve, + alias: { + ...newConfig.resolve?.alias, + [path.resolve(buildContext.dir, `./node_modules/@sentry/tracing/esm/${excludedTracingDir}`)]: false, + // TODO It's not clear if it will ever pull from `dist` (in testing it never does), so we may not need this. + [path.resolve(buildContext.dir, `./node_modules/@sentry/tracing/dist/${excludedTracingDir}`)]: false, + }, + }; + } + // Enable the Sentry plugin (which uploads source maps to Sentry when not in dev) by default const enableWebpackPlugin = buildContext.isServer ? !userNextConfig.sentry?.disableServerWebpackPlugin diff --git a/packages/tracing/src/integrations/index.ts b/packages/tracing/src/integrations/index.ts index 5a9bd10b2d3c..4231abf350e6 100644 --- a/packages/tracing/src/integrations/index.ts +++ b/packages/tracing/src/integrations/index.ts @@ -1,4 +1,4 @@ -export { Express } from './express'; -export { Postgres } from './postgres'; -export { Mysql } from './mysql'; -export { Mongo } from './mongo'; +export { Express } from './node/express'; +export { Postgres } from './node/postgres'; +export { Mysql } from './node/mysql'; +export { Mongo } from './node/mongo'; diff --git a/packages/tracing/src/integrations/express.ts b/packages/tracing/src/integrations/node/express.ts similarity index 100% rename from packages/tracing/src/integrations/express.ts rename to packages/tracing/src/integrations/node/express.ts diff --git a/packages/tracing/src/integrations/mongo.ts b/packages/tracing/src/integrations/node/mongo.ts similarity index 100% rename from packages/tracing/src/integrations/mongo.ts rename to packages/tracing/src/integrations/node/mongo.ts diff --git a/packages/tracing/src/integrations/mysql.ts b/packages/tracing/src/integrations/node/mysql.ts similarity index 100% rename from packages/tracing/src/integrations/mysql.ts rename to packages/tracing/src/integrations/node/mysql.ts diff --git a/packages/tracing/src/integrations/postgres.ts b/packages/tracing/src/integrations/node/postgres.ts similarity index 100% rename from packages/tracing/src/integrations/postgres.ts rename to packages/tracing/src/integrations/node/postgres.ts diff --git a/packages/tracing/test/integrations/mongo.test.ts b/packages/tracing/test/integrations/node/mongo.test.ts similarity index 96% rename from packages/tracing/test/integrations/mongo.test.ts rename to packages/tracing/test/integrations/node/mongo.test.ts index fa7b91ee681f..521e922b4f89 100644 --- a/packages/tracing/test/integrations/mongo.test.ts +++ b/packages/tracing/test/integrations/node/mongo.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/unbound-method */ import { Hub, Scope } from '@sentry/hub'; -import { Mongo } from '../../src/integrations/mongo'; -import { Span } from '../../src/span'; +import { Mongo } from '../../../src/integrations/node/mongo'; +import { Span } from '../../../src/span'; class Collection { public collectionName: string = 'mockedCollectionName'; diff --git a/packages/tracing/test/integrations/postgres.test.ts b/packages/tracing/test/integrations/node/postgres.test.ts similarity index 96% rename from packages/tracing/test/integrations/postgres.test.ts rename to packages/tracing/test/integrations/node/postgres.test.ts index 98bb45357783..d8c335f54d88 100644 --- a/packages/tracing/test/integrations/postgres.test.ts +++ b/packages/tracing/test/integrations/node/postgres.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/unbound-method */ import { Hub, Scope } from '@sentry/hub'; -import { Postgres } from '../../src/integrations/postgres'; -import { Span } from '../../src/span'; +import { Postgres } from '../../../src/integrations/node/postgres'; +import { Span } from '../../../src/span'; class PgClient { // https://node-postgres.com/api/client#clientquery