File tree 4 files changed +25
-6
lines changed
4 files changed +25
-6
lines changed Original file line number Diff line number Diff line change 2
2
<div class =" comments" ><!-- hello--> </div >
3
3
<h1 >Vue SFCs</h1 >
4
4
<pre >{{ time }}</pre >
5
- <Hmr />
5
+ <div class =" hmr-block" >
6
+ <Hmr />
7
+ </div >
6
8
<Syntax />
7
9
<PreProcessors />
8
10
<CssModules />
Original file line number Diff line number Diff line change @@ -133,6 +133,11 @@ describe('hmr', () => {
133
133
)
134
134
await untilUpdated ( ( ) => page . textContent ( '.hmr-inc' ) , 'count is 100' )
135
135
} )
136
+
137
+ test ( 'should re-render when template is emptied' , async ( ) => {
138
+ editFile ( 'Hmr.vue' , ( ) => '' )
139
+ await untilUpdated ( ( ) => page . innerHTML ( '.hmr-block' ) , '<!---->' )
140
+ } )
136
141
} )
137
142
138
143
describe ( 'src imports' , ( ) => {
Original file line number Diff line number Diff line change @@ -144,7 +144,7 @@ export async function handleHotUpdate({
144
144
return [ ...affectedModules ] . filter ( Boolean ) as ModuleNode [ ]
145
145
}
146
146
147
- function isEqualBlock ( a : SFCBlock | null , b : SFCBlock | null ) {
147
+ export function isEqualBlock ( a : SFCBlock | null , b : SFCBlock | null ) {
148
148
if ( ! a && ! b ) return true
149
149
if ( ! a || ! b ) return false
150
150
// src imports will trigger their own updates
Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ import {
10
10
import { PluginContext , TransformPluginContext } from 'rollup'
11
11
import { resolveScript } from './script'
12
12
import { transformTemplateInMain } from './template'
13
- import { isOnlyTemplateChanged } from './handleHotUpdate'
13
+ import { isOnlyTemplateChanged , isEqualBlock } from './handleHotUpdate'
14
14
import { RawSourceMap , SourceMapConsumer , SourceMapGenerator } from 'source-map'
15
15
import { createRollupError } from './utils/error'
16
16
@@ -71,11 +71,23 @@ export async function transformMain(
71
71
) )
72
72
}
73
73
74
- const renderReplace = hasTemplateImport
75
- ? ssr
74
+ let renderReplace = ''
75
+ if ( hasTemplateImport ) {
76
+ renderReplace = ssr
76
77
? `_sfc_main.ssrRender = _sfc_ssrRender`
77
78
: `_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
+ }
79
91
80
92
// styles
81
93
const stylesCode = await genStyleCode ( descriptor , pluginContext )
You can’t perform that action at this time.
0 commit comments