diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts
index c0fa0db77b9..572eece60a2 100644
--- a/packages/nuxt/src/core/nitro.ts
+++ b/packages/nuxt/src/core/nitro.ts
@@ -101,6 +101,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
'process.env.NUXT_NO_SSR': nuxt.options.ssr === false,
'process.env.NUXT_NO_SCRIPTS': !!nuxt.options.experimental.noScripts,
'process.env.NUXT_INLINE_STYLES': !!nuxt.options.experimental.inlineSSRStyles,
+ 'process.env.NUXT_PAYLOAD_EXTRACTION': !!nuxt.options.experimental.payloadExtraction,
'process.dev': nuxt.options.dev,
__VUE_PROD_DEVTOOLS__: false
},
diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts
index d5cb7da8c7a..81305b82691 100644
--- a/packages/nuxt/src/core/nuxt.ts
+++ b/packages/nuxt/src/core/nuxt.ts
@@ -174,7 +174,7 @@ async function initNuxt (nuxt: Nuxt) {
})
// Add prerender payload support
- if (!nuxt.options.dev) {
+ if (!nuxt.options.dev && nuxt.options.experimental.payloadExtraction) {
addPlugin(resolve(nuxt.options.appDir, 'plugins/payload.client'))
}
diff --git a/packages/nuxt/src/core/runtime/nitro/renderer.ts b/packages/nuxt/src/core/runtime/nitro/renderer.ts
index 1cdcd933548..7364ca49d52 100644
--- a/packages/nuxt/src/core/runtime/nitro/renderer.ts
+++ b/packages/nuxt/src/core/runtime/nitro/renderer.ts
@@ -103,7 +103,7 @@ const getSPARenderer = lazyCachedFunction(async () => {
return { renderToString }
})
-const PAYLOAD_CACHE = process.env.prerender ? new Map() : null // TODO: Use LRU cache
+const PAYLOAD_CACHE = (process.env.NUXT_PAYLOAD_EXTRACTION && process.env.prerender) ? new Map() : null // TODO: Use LRU cache
const PAYLOAD_URL_RE = /\/_payload(\.[a-zA-Z0-9]+)?.js(\?.*)?$/
const PRERENDER_NO_SSR_ROUTES = new Set(['/index.html', '/200.html', '/404.html'])
@@ -142,7 +142,8 @@ export default defineRenderHandler(async (event) => {
}
// Whether we are prerendering route
- const payloadURL = (process.env.prerender && !ssrContext.noSSR) ? joinURL(url, '_payload.js') : undefined
+ const _PAYLOAD_EXTRACTION = process.env.prerender && process.env.NUXT_PAYLOAD_EXTRACTION && !ssrContext.noSSR
+ const payloadURL = _PAYLOAD_EXTRACTION ? joinURL(url, '_payload.js') : undefined
if (process.env.prerender) {
ssrContext.payload.prerenderedAt = Date.now()
}
@@ -174,7 +175,7 @@ export default defineRenderHandler(async (event) => {
return response
}
- if (process.env.prerender) {
+ if (_PAYLOAD_EXTRACTION) {
// Hint nitro to prerender payload for this route
appendHeader(event, 'x-nitro-prerender', payloadURL!)
// Use same ssr context to generate payload for this route
@@ -194,7 +195,7 @@ export default defineRenderHandler(async (event) => {
htmlAttrs: normalizeChunks([renderedMeta.htmlAttrs]),
head: normalizeChunks([
renderedMeta.headTags,
- (process.env.prerender && !ssrContext.noSSR) ? `` : null,
+ _PAYLOAD_EXTRACTION ? `` : null,
_rendered.renderResourceHints(),
_rendered.renderStyles(),
inlinedStyles,
@@ -212,7 +213,7 @@ export default defineRenderHandler(async (event) => {
bodyAppend: normalizeChunks([
process.env.NUXT_NO_SCRIPTS
? undefined
- : ((process.env.prerender && !ssrContext.noSSR)
+ : (_PAYLOAD_EXTRACTION
? ``
: ``
),
diff --git a/packages/schema/src/config/experimental.ts b/packages/schema/src/config/experimental.ts
index fc0417a2872..9fc13cf2998 100644
--- a/packages/schema/src/config/experimental.ts
+++ b/packages/schema/src/config/experimental.ts
@@ -74,5 +74,10 @@ export default defineUntypedSchema({
* Turn off rendering of Nuxt scripts and JS resource hints.
*/
noScripts: false,
+
+ /**
+ * When this option is enabled (by default) payload of pages generated with `nuxt generate` are extracted
+ */
+ payloadExtraction: true,
}
})