From 3a7de51424ea353f4242f849d3f3844c7856b37b Mon Sep 17 00:00:00 2001 From: daiwei Date: Tue, 9 Dec 2025 14:59:17 +0800 Subject: [PATCH 1/4] fix(plugin-vue): ensure template-only components hmr correctly switch between vapor and vdom --- packages/plugin-vue/src/handleHotUpdate.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index d081b49e..6e68cc00 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -199,6 +199,9 @@ export function isOnlyTemplateChanged( ): boolean { return ( !hasScriptChanged(prev, next) && + // @ts-expect-error TODO remove when 3.6 is out + // reload is required for template only components switch between vapor and vdom + prev.vapor === next.vapor && prev.styles.length === next.styles.length && prev.styles.every((s, i) => isEqualBlock(s, next.styles[i])) && prev.customBlocks.length === next.customBlocks.length && From 7415d9df9becd9244fb34ce146a7dbb0cfc33731 Mon Sep 17 00:00:00 2001 From: daiwei Date: Tue, 9 Dec 2025 15:47:35 +0800 Subject: [PATCH 2/4] chore: tweaks --- packages/plugin-vue/src/handleHotUpdate.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index 6e68cc00..6c552a80 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -299,6 +299,9 @@ function isEqualAst(prev?: t.Statement[], next?: t.Statement[]): boolean { } function hasScriptChanged(prev: SFCDescriptor, next: SFCDescriptor): boolean { + // @ts-expect-error TODO remove when 3.6 is out + if (prev.vapor !== next.vapor) return true + // check for scriptAst/scriptSetupAst changes // note that the next ast is not available yet, so we need to trigger parsing const prevScript = getResolvedScript(prev, false) From 48f1fff95b370a4cce050a506c06666f57c983cc Mon Sep 17 00:00:00 2001 From: daiwei Date: Tue, 9 Dec 2025 15:49:03 +0800 Subject: [PATCH 3/4] chore: tweaks --- packages/plugin-vue/src/handleHotUpdate.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index 6c552a80..80e15fc9 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -200,7 +200,6 @@ export function isOnlyTemplateChanged( return ( !hasScriptChanged(prev, next) && // @ts-expect-error TODO remove when 3.6 is out - // reload is required for template only components switch between vapor and vdom prev.vapor === next.vapor && prev.styles.length === next.styles.length && prev.styles.every((s, i) => isEqualBlock(s, next.styles[i])) && From c9e8df8ecae45c75681a32a0d940867917fd0db3 Mon Sep 17 00:00:00 2001 From: daiwei Date: Tue, 9 Dec 2025 15:58:33 +0800 Subject: [PATCH 4/4] chore: tweaks --- packages/plugin-vue/src/handleHotUpdate.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index 80e15fc9..1ca949f0 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -199,8 +199,6 @@ export function isOnlyTemplateChanged( ): boolean { return ( !hasScriptChanged(prev, next) && - // @ts-expect-error TODO remove when 3.6 is out - prev.vapor === next.vapor && prev.styles.length === next.styles.length && prev.styles.every((s, i) => isEqualBlock(s, next.styles[i])) && prev.customBlocks.length === next.customBlocks.length &&