Skip to content

Commit 1153565

Browse files
authored
fix(plugin-vue): fix hmr when emptying sfc file (#2142)
fix #2128
1 parent 3a60f84 commit 1153565

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

packages/plugin-vue/src/handleHotUpdate.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export async function handleHotUpdate({
144144
return [...affectedModules].filter(Boolean) as ModuleNode[]
145145
}
146146

147-
function isEqualBlock(a: SFCBlock | null, b: SFCBlock | null) {
147+
export function isEqualBlock(a: SFCBlock | null, b: SFCBlock | null) {
148148
if (!a && !b) return true
149149
if (!a || !b) return false
150150
// src imports will trigger their own updates

packages/plugin-vue/src/main.ts

+16-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import { PluginContext, TransformPluginContext } from 'rollup'
1111
import { resolveScript } from './script'
1212
import { transformTemplateInMain } from './template'
13-
import { isOnlyTemplateChanged } from './handleHotUpdate'
13+
import { isOnlyTemplateChanged, isEqualBlock } from './handleHotUpdate'
1414
import { RawSourceMap, SourceMapConsumer, SourceMapGenerator } from 'source-map'
1515
import { createRollupError } from './utils/error'
1616

@@ -71,11 +71,23 @@ export async function transformMain(
7171
))
7272
}
7373

74-
const renderReplace = hasTemplateImport
75-
? ssr
74+
let renderReplace = ''
75+
if (hasTemplateImport) {
76+
renderReplace = ssr
7677
? `_sfc_main.ssrRender = _sfc_ssrRender`
7778
: `_sfc_main.render = _sfc_render`
78-
: ''
79+
} else {
80+
// #2128
81+
// User may empty the template but we didn't provide rerender function before
82+
if (
83+
prevDescriptor &&
84+
!isEqualBlock(descriptor.template, prevDescriptor.template)
85+
) {
86+
renderReplace = ssr
87+
? `_sfc_main.ssrRender = () => {}`
88+
: `_sfc_main.render = () => {}`
89+
}
90+
}
7991

8092
// styles
8193
const stylesCode = await genStyleCode(descriptor, pluginContext)

0 commit comments

Comments
 (0)