From 551eaea25f2e3434aedf19638f94c78520e4145f Mon Sep 17 00:00:00 2001 From: OneNail <31649110+OneNail@users.noreply.github.com> Date: Wed, 1 Sep 2021 20:25:57 +0800 Subject: [PATCH] fix: hmr doesn't work when modifying the code of jsx in sfc (#4563) --- packages/plugin-vue-jsx/index.js | 2 +- packages/plugin-vue/src/handleHotUpdate.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/plugin-vue-jsx/index.js b/packages/plugin-vue-jsx/index.js index 8b739a4f..86b01170 100644 --- a/packages/plugin-vue-jsx/index.js +++ b/packages/plugin-vue-jsx/index.js @@ -207,7 +207,7 @@ function vueJsxPlugin(options = {}) { ) + `\nexport default __default__` } - if (needHmr && !ssr) { + if (needHmr && !ssr && !/\?vue&type=script/.test(id)) { let code = result.code let callbackCode = `` for (const { local, exported, id } of hotComponents) { diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index bed495a2..94d1fb4e 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -46,7 +46,14 @@ export async function handleHotUpdate({ !isEqualBlock(descriptor.script, prevDescriptor.script) || !isEqualBlock(descriptor.scriptSetup, prevDescriptor.scriptSetup) ) { - affectedModules.add(mainModule) + let scriptModule: ModuleNode | undefined + if (descriptor.script?.lang && !descriptor.script.src) { + const scriptModuleRE = new RegExp( + `type=script.*&lang\.${descriptor.script.lang}$` + ) + scriptModule = modules.find((m) => scriptModuleRE.test(m.url)) + } + affectedModules.add(scriptModule || mainModule) } if (!isEqualBlock(descriptor.template, prevDescriptor.template)) {