Skip to content

Commit 014228f

Browse files
ztannereps1lon
andauthored
stabilize experimental.enablePrerenderSourcemaps (#84916)
As part of stabilizing cacheComponents, we are also stabilizing supporting flags. This flag has been enabled with cacheComponents for some time and so we are moving it out of experimental. It will continue to be enabled by default if you are using cacheComponents. Otherwise, it can be opted into independently via next config. Closes https://linear.app/vercel/issue/NDX-1048 Closes #80317 --------- Co-authored-by: Sebastian "Sebbie" Silbermann <[email protected]>
1 parent 206fa75 commit 014228f

File tree

11 files changed

+39
-65
lines changed

11 files changed

+39
-65
lines changed

docs/01-app/02-guides/memory-usage.mdx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ Generating source maps consumes extra memory during the build process.
125125

126126
You can disable source map generation by adding `productionBrowserSourceMaps: false` and `experimental.serverSourceMaps: false` to your Next.js configuration.
127127

128+
When using the `experimental.cacheComponents` feature, Next.js will use source maps by default during the prerender phase of `next build`.
129+
If you consistently encounter memory issues during that phase (after "Generating static pages"),
130+
you can try disabling source maps in that phase by adding `enablePrerenderSourceMaps: false` to your Next.js configuration.
131+
128132
> **Good to know**: Some plugins may turn on source maps and may require custom configuration to disable.
129133
130134
## Edge memory issues

docs/01-app/03-api-reference/06-cli/next.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ This enables several experimental options to make debugging easier:
240240
- Generates source maps for server bundles:
241241
- `experimental.serverSourceMaps = true`
242242
- Enables source map consumption in child processes used for prerendering:
243-
- `experimental.enablePrerenderSourceMaps = true`
243+
- `enablePrerenderSourceMaps = true`
244244
- Continues building even after the first prerender error, so you can see all issues at once:
245245
- `experimental.prerenderEarlyExit = false`
246246

packages/next/src/build/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,7 @@ export function createStaticWorker(
853853
progress?.clear()
854854
},
855855
debuggerPortOffset,
856-
enableSourceMaps: config.experimental.enablePrerenderSourceMaps,
856+
enableSourceMaps: config.enablePrerenderSourceMaps,
857857
// remove --max-old-space-size flag as it can cause memory issues.
858858
isolatedMemory: true,
859859
enableWorkerThreads: config.experimental.workerThreads,

packages/next/src/export/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ async function exportAppImpl(
413413
(process.env.TURBOPACK
414414
? nextConfig.experimental.turbopackMinify === false
415415
: nextConfig.experimental.serverMinification === false) &&
416-
nextConfig.experimental.enablePrerenderSourceMaps === true,
416+
nextConfig.enablePrerenderSourceMaps === true,
417417
}
418418

419419
// We need this for server rendering the Link component.

packages/next/src/export/worker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ export async function exportPages(
339339

340340
installGlobalBehaviors(nextConfig)
341341

342-
if (nextConfig.experimental.enablePrerenderSourceMaps) {
342+
if (nextConfig.enablePrerenderSourceMaps) {
343343
try {
344344
// Same as `next dev`
345345
// Limiting the stack trace to a useful amount of frames is handled by ignore-listing.

packages/next/src/server/config-schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,6 @@ export const experimentalSchema = {
313313
optimizeServerReact: z.boolean().optional(),
314314
clientTraceMetadata: z.array(z.string()).optional(),
315315
serverMinification: z.boolean().optional(),
316-
enablePrerenderSourceMaps: z.boolean().optional(),
317316
serverSourceMaps: z.boolean().optional(),
318317
useWasmBinary: z.boolean().optional(),
319318
useLightningcss: z.boolean().optional(),
@@ -468,6 +467,7 @@ export const configSchema: zod.ZodType<NextConfig> = z.lazy(() =>
468467
.optional(),
469468
distDir: z.string().min(1).optional(),
470469
env: z.record(z.string(), z.union([z.string(), z.undefined()])).optional(),
470+
enablePrerenderSourceMaps: z.boolean().optional(),
471471
excludeDefaultMomentLocales: z.boolean().optional(),
472472
experimental: z.strictObject(experimentalSchema).optional(),
473473
exportPathMap: z

packages/next/src/server/config-shared.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -625,12 +625,6 @@ export interface ExperimentalConfig {
625625
*/
626626
serverMinification?: boolean
627627

628-
/**
629-
* Enables source maps while generating static pages.
630-
* Helps with errors during the prerender phase in `next build`.
631-
*/
632-
enablePrerenderSourceMaps?: boolean
633-
634628
/**
635629
* Enables source maps generation for the server production bundle.
636630
*/
@@ -1260,6 +1254,12 @@ export interface NextConfig {
12601254
*/
12611255
logging?: LoggingConfig | false
12621256

1257+
/**
1258+
* Enables source maps while generating static pages.
1259+
* Helps with errors during the prerender phase in `next build`.
1260+
*/
1261+
enablePrerenderSourceMaps?: boolean
1262+
12631263
/**
12641264
* period (in seconds) where the server allow to serve stale cache
12651265
*/
@@ -1385,6 +1385,8 @@ export const defaultConfig = Object.freeze({
13851385
modularizeImports: undefined,
13861386
outputFileTracingRoot: process.env.NEXT_PRIVATE_OUTPUT_TRACE_ROOT || '',
13871387
allowedDevOrigins: undefined,
1388+
// Will default to cacheComponents value.
1389+
enablePrerenderSourceMaps: undefined,
13881390
experimental: {
13891391
adapterPath: process.env.NEXT_ADAPTER_PATH || undefined,
13901392
useSkewCookie: false,
@@ -1435,8 +1437,6 @@ export const defaultConfig = Object.freeze({
14351437
appNavFailHandling: false,
14361438
prerenderEarlyExit: true,
14371439
serverMinification: true,
1438-
// Will default to cacheComponents value.
1439-
enablePrerenderSourceMaps: undefined,
14401440
serverSourceMaps: false,
14411441
linkNoTouchStart: false,
14421442
caseSensitiveRoutes: false,

packages/next/src/server/config.ts

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,13 @@ function assignDefaultsAndValidate(
707707
configFileName,
708708
silent
709709
)
710+
warnOptionHasBeenMovedOutOfExperimental(
711+
result,
712+
'enablePrerenderSourceMaps',
713+
'enablePrerenderSourceMaps',
714+
configFileName,
715+
silent
716+
)
710717

711718
if ((result.experimental as any).outputStandalone) {
712719
if (!silent) {
@@ -1269,9 +1276,14 @@ function assignDefaultsAndValidate(
12691276
result.experimental.mcpServer = true
12701277
}
12711278

1272-
// TODO: remove once we've finished migrating internally to cacheComponents.
12731279
if (result.experimental.cacheComponents) {
1280+
// TODO: remove once we've finished migrating internally to cacheComponents.
12741281
result.experimental.ppr = true
1282+
1283+
// Prerender sourcemaps are enabled by default when using cacheComponents, unless explicitly disabled.
1284+
if (result.enablePrerenderSourceMaps === undefined) {
1285+
result.enablePrerenderSourceMaps = true
1286+
}
12751287
}
12761288

12771289
// "use cache" was originally implicitly enabled with the cacheComponents flag, so
@@ -1734,6 +1746,9 @@ function enforceExperimentalFeatures(
17341746
debugPrerender &&
17351747
(phase === PHASE_PRODUCTION_BUILD || phase === PHASE_EXPORT)
17361748
) {
1749+
// TODO: This is not an experimental feature, but should be enabled alongside other prerender debugging features.
1750+
config.enablePrerenderSourceMaps = true
1751+
17371752
setExperimentalFeatureForDebugPrerender(
17381753
config.experimental,
17391754
'serverSourceMaps',
@@ -1748,13 +1763,6 @@ function enforceExperimentalFeatures(
17481763
configuredExperimentalFeatures
17491764
)
17501765

1751-
setExperimentalFeatureForDebugPrerender(
1752-
config.experimental,
1753-
'enablePrerenderSourceMaps',
1754-
true,
1755-
configuredExperimentalFeatures
1756-
)
1757-
17581766
setExperimentalFeatureForDebugPrerender(
17591767
config.experimental,
17601768
'prerenderEarlyExit',
@@ -1810,22 +1818,6 @@ function enforceExperimentalFeatures(
18101818
config.reactCompiler = true
18111819
// TODO: Report if we enable non-experimental features via env
18121820
}
1813-
1814-
if (
1815-
config.experimental.enablePrerenderSourceMaps === undefined &&
1816-
config.experimental.cacheComponents === true
1817-
) {
1818-
config.experimental.enablePrerenderSourceMaps = true
1819-
1820-
if (configuredExperimentalFeatures) {
1821-
addConfiguredExperimentalFeature(
1822-
configuredExperimentalFeatures,
1823-
'enablePrerenderSourceMaps',
1824-
true,
1825-
'enabled by `experimental.cacheComponents`'
1826-
)
1827-
}
1828-
}
18291821
}
18301822

18311823
function addConfiguredExperimentalFeature<

test/e2e/app-dir/root-suspense-dynamic/fixtures/default/next.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
* @type {import('next').NextConfig}
33
*/
44
const nextConfig = {
5+
enablePrerenderSourceMaps: false,
6+
57
experimental: {
68
cacheComponents: true,
7-
enablePrerenderSourceMaps: false,
89
},
910
}
1011

test/e2e/app-dir/server-source-maps/fixtures/edge/next.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
* @type {import('next').NextConfig}
33
*/
44
const nextConfig = {
5+
enablePrerenderSourceMaps: true,
56
experimental: {
67
cpus: 1,
7-
enablePrerenderSourceMaps: true,
88
serverSourceMaps: true,
99
},
1010
}

0 commit comments

Comments
 (0)