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
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
}
@ -304,28 +310,22 @@ export default defineNuxtModule({
processPages(pages)
})
// For static sites with ssr: false with crawl, prerender all routes
nuxt.hook('nitro:init', (nitro) => {
nuxt.hook('nitro:build:before', (nitro) => {
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
// as the rest will be injected at runtime when this is prerendered
if (nuxt.options.ssr) {
nitro.hooks.hook('prerender:routes', (routes) => {
if ([...routes].every(r => r.match(/(^\/api|\.\w+)/))) {
const [firstPage] = [...prerenderRoutes].sort()
routes.add(firstPage || '/')
}
})
const [firstPage] = [...prerenderRoutes].sort()
nitro.options.prerender.routes.push(firstPage || '/')
return
}
// 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 || []) {
prerenderRoutes.add(route)
}
nitro.options.prerender.routes = Array.from(prerenderRoutes)
})
for (const route of nitro.options.prerender.routes || []) {
prerenderRoutes.add(route)
}
nitro.options.prerender.routes = Array.from(prerenderRoutes)
})
nuxt.hook('imports:extend', (imports) => {