diff --git a/packages/nuxt/src/pages/utils.ts b/packages/nuxt/src/pages/utils.ts index 2d75725b7f..9a88d3d4ab 100644 --- a/packages/nuxt/src/pages/utils.ts +++ b/packages/nuxt/src/pages/utils.ts @@ -139,8 +139,8 @@ const pageContentsCache: Record = {} const metaCache: Record>> = {} async function getRouteMeta (contents: string, absolutePath: string): Promise>> { // set/update pageContentsCache, invalidate metaCache on cache mismatch - if (!(absolutePath in pageContentsCache) || pageContentsCache[absolutePath] !== contents) { - pageContentsCache[absolutePath] = contents + if (!(absolutePath in pageContentsCache) || pageContentsCache[absolutePath] !== contents) { + pageContentsCache[absolutePath] = contents delete metaCache[absolutePath] } @@ -414,6 +414,12 @@ export function normalizeRoutes (routes: NuxtPage[], metaImports: Set = redirect: serializeRouteValue(page.redirect), } + for (const key of ['path', 'name', 'meta', 'alias', 'redirect'] satisfies NormalizedRouteKeys) { + if (route[key] === undefined) { + delete route[key] + } + } + if (page.children?.length) { route.children = normalizeRoutes(page.children, metaImports, overrideMeta).routes } diff --git a/packages/nuxt/test/__snapshots__/pages-override-meta-disabled.test.ts.snap b/packages/nuxt/test/__snapshots__/pages-override-meta-disabled.test.ts.snap index d05072877c..11885f3625 100644 --- a/packages/nuxt/test/__snapshots__/pages-override-meta-disabled.test.ts.snap +++ b/packages/nuxt/test/__snapshots__/pages-override-meta-disabled.test.ts.snap @@ -15,7 +15,6 @@ "meta": "{"hello":"world"}", "name": ""home"", "path": ""/"", - "redirect": undefined, }, ], "should allow pages with `:` in their path": [ diff --git a/packages/nuxt/test/__snapshots__/pages-override-meta-enabled.test.ts.snap b/packages/nuxt/test/__snapshots__/pages-override-meta-enabled.test.ts.snap index 977956010f..88989345d1 100644 --- a/packages/nuxt/test/__snapshots__/pages-override-meta-enabled.test.ts.snap +++ b/packages/nuxt/test/__snapshots__/pages-override-meta-enabled.test.ts.snap @@ -14,7 +14,6 @@ "meta": "{"hello":"world"}", "name": ""home"", "path": ""/"", - "redirect": undefined, }, ], "should allow pages with `:` in their path": [ diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index 19b5565303..eb931240f6 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -100,6 +100,14 @@ export default defineNuxtConfig({ })) addBuildPlugin(plugin) }, + function (_options, nuxt) { + nuxt.hook('pages:extend', pages => { + pages.push({ + path: '/manual-redirect', + redirect: '/', + }) + }) + }, function (_options, nuxt) { const routesToDuplicate = ['/async-parent', '/fixed-keyed-child-parent', '/keyed-child-parent', '/with-layout', '/with-layout2'] const stripLayout = (page: NuxtPage): NuxtPage => ({