diff --git a/packages/next/src/build/webpack-config.ts b/packages/next/src/build/webpack-config.ts index 5843b6eed0859..cbe8ae7596b87 100644 --- a/packages/next/src/build/webpack-config.ts +++ b/packages/next/src/build/webpack-config.ts @@ -2729,6 +2729,7 @@ export default async function getBaseWebpackConfig( experimental: config.experimental, disableStaticImages: config.images.disableStaticImages, transpilePackages: config.transpilePackages, + enableSourceMapsForServer: config.enableSourceMapsForServer, }) // @ts-ignore Cache exists diff --git a/packages/next/src/build/webpack/config/blocks/base.ts b/packages/next/src/build/webpack/config/blocks/base.ts index 9e9363d2e5e03..89c901b60768a 100644 --- a/packages/next/src/build/webpack/config/blocks/base.ts +++ b/packages/next/src/build/webpack/config/blocks/base.ts @@ -35,7 +35,7 @@ export const base = curry(function base( } else { if ( ctx.isEdgeRuntime || - ctx.isServer || + (ctx.isServer && ctx.enableSourceMapsForServer) || // Enable browser sourcemaps: (ctx.productionBrowserSourceMaps && ctx.isClient) ) { diff --git a/packages/next/src/build/webpack/config/index.ts b/packages/next/src/build/webpack/config/index.ts index b9f0718469b3a..b5732833a500c 100644 --- a/packages/next/src/build/webpack/config/index.ts +++ b/packages/next/src/build/webpack/config/index.ts @@ -25,6 +25,7 @@ export async function buildConfiguration( transpilePackages, experimental, disableStaticImages, + enableSourceMapsForServer, }: { hasAppDir: boolean supportedBrowsers: string[] | undefined @@ -41,6 +42,7 @@ export async function buildConfiguration( future: NextConfigComplete['future'] experimental: NextConfigComplete['experimental'] disableStaticImages: NextConfigComplete['disableStaticImages'] + enableSourceMapsForServer: NextConfigComplete['enableSourceMapsForServer'] } ): Promise { const ctx: ConfigurationContext = { @@ -64,6 +66,7 @@ export async function buildConfiguration( transpilePackages, future, experimental, + enableSourceMapsForServer, } let fns = [base(ctx), css(ctx)] diff --git a/packages/next/src/build/webpack/config/utils.ts b/packages/next/src/build/webpack/config/utils.ts index 0cae76e8a83f2..333d9bd66ae0e 100644 --- a/packages/next/src/build/webpack/config/utils.ts +++ b/packages/next/src/build/webpack/config/utils.ts @@ -22,6 +22,7 @@ export type ConfigurationContext = { sassOptions: any productionBrowserSourceMaps: boolean + enableSourceMapsForServer: boolean transpilePackages: NextConfigComplete['transpilePackages'] diff --git a/packages/next/src/server/config-schema.ts b/packages/next/src/server/config-schema.ts index a213318d52027..118bd7bd8e583 100644 --- a/packages/next/src/server/config-schema.ts +++ b/packages/next/src/server/config-schema.ts @@ -203,6 +203,9 @@ const configSchema = { disableServerMinification: { type: 'boolean', }, + enableSourceMapsForServer: { + type: 'boolean', + }, env: { type: 'object', }, diff --git a/packages/next/src/server/config-shared.ts b/packages/next/src/server/config-shared.ts index c47c45ffe8a92..184e8c62cda47 100644 --- a/packages/next/src/server/config-shared.ts +++ b/packages/next/src/server/config-shared.ts @@ -459,6 +459,11 @@ export interface NextConfig extends Record { */ disableServerMinification?: boolean + /** + * Enables source maps generation for the server production bundle. + */ + enableSourceMapsForServer?: boolean + /** * Next.js exposes some options that give you some control over how the server will dispose or keep in memory built pages in development. * @@ -646,6 +651,7 @@ export const defaultConfig: NextConfig = { analyticsId: process.env.VERCEL_ANALYTICS_ID || '', images: imageConfigDefault, disableServerMinification: false, + enableSourceMapsForServer: false, devIndicators: { buildActivity: true, buildActivityPosition: 'bottom-right',