Skip to content
This repository has been archived by the owner on Apr 6, 2023. It is now read-only.

feat: allow disabling payload extraction #7588

Merged
merged 1 commit into from Sep 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/nuxt/src/core/nitro.ts
Expand Up @@ -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
},
Expand Down
2 changes: 1 addition & 1 deletion packages/nuxt/src/core/nuxt.ts
Expand Up @@ -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'))
}

Expand Down
11 changes: 6 additions & 5 deletions packages/nuxt/src/core/runtime/nitro/renderer.ts
Expand Up @@ -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'])
Expand Down Expand Up @@ -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()
}
Expand Down Expand Up @@ -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
Expand All @@ -194,7 +195,7 @@ export default defineRenderHandler(async (event) => {
htmlAttrs: normalizeChunks([renderedMeta.htmlAttrs]),
head: normalizeChunks([
renderedMeta.headTags,
(process.env.prerender && !ssrContext.noSSR) ? `<link rel="modulepreload" href="${payloadURL}">` : null,
_PAYLOAD_EXTRACTION ? `<link rel="modulepreload" href="${payloadURL}">` : null,
_rendered.renderResourceHints(),
_rendered.renderStyles(),
inlinedStyles,
Expand All @@ -212,7 +213,7 @@ export default defineRenderHandler(async (event) => {
bodyAppend: normalizeChunks([
process.env.NUXT_NO_SCRIPTS
? undefined
: ((process.env.prerender && !ssrContext.noSSR)
: (_PAYLOAD_EXTRACTION
? `<script type="module">import p from "${payloadURL}";window.__NUXT__={...p,...(${devalue(splitPayload(ssrContext).initial)})}</script>`
: `<script>window.__NUXT__=${devalue(ssrContext.payload)}</script>`
),
Expand Down
5 changes: 5 additions & 0 deletions packages/schema/src/config/experimental.ts
Expand Up @@ -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,
}
})