From 5605f1ce18d152122d966ac37c35c4c434b16184 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Fri, 16 Sep 2022 12:14:41 +0200 Subject: [PATCH] feat: allow disabling payload extraction (#7588) --- packages/nuxt/src/core/nitro.ts | 1 + packages/nuxt/src/core/nuxt.ts | 2 +- packages/nuxt/src/core/runtime/nitro/renderer.ts | 11 ++++++----- packages/schema/src/config/experimental.ts | 5 +++++ 4 files changed, 13 insertions(+), 6 deletions(-) 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, } })