From 62dfff5818af2c02194feef36a1b18ff4b59e8a3 Mon Sep 17 00:00:00 2001 From: Bobbie Goede Date: Tue, 2 Apr 2024 18:57:20 +0200 Subject: [PATCH] fix: ignore root when prerendering using `strategy: 'prefix'` (#2894) --- src/module.ts | 19 +++++++++++++++++++ src/pages.ts | 7 +++++++ 2 files changed, 26 insertions(+) diff --git a/src/module.ts b/src/module.ts index 031747345..14523c25c 100644 --- a/src/module.ts +++ b/src/module.ts @@ -197,6 +197,25 @@ export default defineNuxtModule({ await setupPages(options, nuxt) } + /** + * ignore `/` during prerender when using prefixed routing + */ + + if (options.strategy === 'prefix' && nuxt.options._generate) { + const localizedEntryPages = normalizedLocales.map(x => ['/', x.code].join('')) + nuxt.hook('nitro:config', config => { + config.prerender ??= {} + + // ignore `/` which is added by nitro by default + config.prerender.ignore ??= [] + config.prerender.ignore.push(/^\/$/) + + // add localized routes as entry pages for prerendering + config.prerender.routes ??= [] + config.prerender.routes.push(...localizedEntryPages) + }) + } + /** * setup module alias */ diff --git a/src/pages.ts b/src/pages.ts index eb98f4ea7..6b64f22c0 100644 --- a/src/pages.ts +++ b/src/pages.ts @@ -57,6 +57,13 @@ export function setupPages(options: Required, nuxt: Nuxt) { includeUnprefixedFallback, optionsResolver: getRouteOptionsResolver(ctx, options) }) + + // keep root when using prefixed routing without prerendering + const indexPage = pages.find(x => x.path === '/') + if (!nuxt.options._generate && options.strategy === 'prefix' && indexPage != null) { + localizedPages.unshift(indexPage) + } + pages.splice(0, pages.length) pages.unshift(...(localizedPages as NuxtPage[])) debug('... made pages', pages)