fix(nuxt): always prerender at least one page with crawler (#28131)

This commit is contained in:
Daniel Roe 2024-07-12 13:22:17 +01:00
parent e102d1d444
commit c48ea9636f
No known key found for this signature in database
GPG Key ID: 3714AB03996F442B

View File

@ -143,6 +143,12 @@ export default defineNuxtModule({
priority: 10, // built-in that we do not expect the user to override priority: 10, // built-in that we do not expect the user to override
filePath: resolve(distDir, 'pages/runtime/page-placeholder'), filePath: resolve(distDir, 'pages/runtime/page-placeholder'),
}) })
// Prerender index if pages integration is not enabled
nuxt.hook('nitro:init', (nitro) => {
if (nuxt.options.dev || !nuxt.options.ssr || !nitro.options.static || !nitro.options.prerender.crawlLinks) { return }
nitro.options.prerender.routes.push('/')
})
return return
} }
@ -304,29 +310,23 @@ export default defineNuxtModule({
processPages(pages) processPages(pages)
}) })
// For static sites with ssr: false with crawl, prerender all routes nuxt.hook('nitro:build:before', (nitro) => {
nuxt.hook('nitro:init', (nitro) => {
if (nuxt.options.dev || !nitro.options.static || nuxt.options.router.options.hashMode || !nitro.options.prerender.crawlLinks) { return } if (nuxt.options.dev || !nitro.options.static || nuxt.options.router.options.hashMode || !nitro.options.prerender.crawlLinks) { return }
// Only hint the first route when `ssr: true` and no routes are provided // Only hint the first route when `ssr: true` and no routes are provided
// as the rest will be injected at runtime when this is prerendered
if (nuxt.options.ssr) { if (nuxt.options.ssr) {
nitro.hooks.hook('prerender:routes', (routes) => {
if ([...routes].every(r => r.match(/(^\/api|\.\w+)/))) {
const [firstPage] = [...prerenderRoutes].sort() const [firstPage] = [...prerenderRoutes].sort()
routes.add(firstPage || '/') nitro.options.prerender.routes.push(firstPage || '/')
}
})
return return
} }
// Prerender all non-dynamic page routes when generating `ssr: false` app // Prerender all non-dynamic page routes when generating `ssr: false` app
nuxt.hook('nitro:build:before', (nitro) => {
for (const route of nitro.options.prerender.routes || []) { for (const route of nitro.options.prerender.routes || []) {
prerenderRoutes.add(route) prerenderRoutes.add(route)
} }
nitro.options.prerender.routes = Array.from(prerenderRoutes) nitro.options.prerender.routes = Array.from(prerenderRoutes)
}) })
})
nuxt.hook('imports:extend', (imports) => { nuxt.hook('imports:extend', (imports) => {
imports.push( imports.push(