From ba31e9ed2631c3b319fb6ab2d4a302700bfcff0d Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Thu, 10 Nov 2022 22:54:16 +0800 Subject: [PATCH] feat(pages): routes HMR --- packages/nuxt/src/pages/module.ts | 12 +++++++++++- packages/nuxt/src/pages/runtime/router.ts | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index d9ec94af32c0..ea84da6effc2 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -167,7 +167,17 @@ export default defineNuxtModule({ const pages = await resolvePagesRoutes() await nuxt.callHook('pages:extend', pages) const { routes, imports } = normalizeRoutes(pages) - return [...imports, `export default ${routes}`].join('\n') + return [ + ...imports, + `export default ${routes}`, + 'export function onUpdate(fn) { onUpdate._fn = fn }', + 'if (import.meta.hot) {', + ' import.meta.hot.accept((mod) => {', + ' onUpdate._fn?.(mod.default)', + ' mod.onUpdate._fn = onUpdate._fn', + ' })', + '}' + ].join('\n') } }) diff --git a/packages/nuxt/src/pages/runtime/router.ts b/packages/nuxt/src/pages/runtime/router.ts index 662b8073bf4c..61829e5c26bd 100644 --- a/packages/nuxt/src/pages/runtime/router.ts +++ b/packages/nuxt/src/pages/runtime/router.ts @@ -67,10 +67,23 @@ export default defineNuxtPlugin(async (nuxtApp) => { const router = createRouter({ ...routerOptions, history, - routes + routes: [] }) + let clearRoutes = router.addRoute({ path: '', children: routes }) nuxtApp.vueApp.use(router) + // Routes HMR + if (import.meta.hot) { + // @ts-expect-error + import('#build/routes').then(({ onUpdate }) => { + onUpdate((newRoutes: any) => { + const routes = routerOptions.routes?.(newRoutes) ?? newRoutes + clearRoutes() + clearRoutes = router.addRoute({ path: '', children: routes }) + }) + }) + } + const previousRoute = shallowRef(router.currentRoute.value) router.afterEach((_to, from) => { previousRoute.value = from