diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index 88f44a37..4f472114 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -38,10 +38,7 @@ export async function handleHotUpdate( ) const templateModule = modules.find((m) => /type=template/.test(m.url)) - if ( - !isEqualBlock(descriptor.script, prevDescriptor.script) || - !isEqualBlock(descriptor.scriptSetup, prevDescriptor.scriptSetup) - ) { + if (hasScriptChanged(prevDescriptor, descriptor)) { let scriptModule: ModuleNode | undefined if (descriptor.script?.lang && !descriptor.script.src) { const scriptModuleRE = new RegExp( @@ -174,11 +171,32 @@ export function isOnlyTemplateChanged( next: SFCDescriptor ): boolean { return ( - isEqualBlock(prev.script, next.script) && - isEqualBlock(prev.scriptSetup, next.scriptSetup) && + !hasScriptChanged(prev, next) && prev.styles.length === next.styles.length && prev.styles.every((s, i) => isEqualBlock(s, next.styles[i])) && prev.customBlocks.length === next.customBlocks.length && prev.customBlocks.every((s, i) => isEqualBlock(s, next.customBlocks[i])) ) } + +function hasScriptChanged(prev: SFCDescriptor, next: SFCDescriptor): boolean { + if (!isEqualBlock(prev.script, next.script)) { + return true + } + if (!isEqualBlock(prev.scriptSetup, next.scriptSetup)) { + return true + } + + // vue core #3176 + //