Skip to content

Commit 50fb23c

Browse files
committed
fix(plugin-vue): hmr not working when updating script+template at the same time with a template preprocessor
ref: vitejs/vite-plugin-vue@93c444c
1 parent 7b21e06 commit 50fb23c

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

src/core/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,13 +292,14 @@ export default createUnplugin<Options | undefined, false>(
292292
return
293293
}
294294

295+
const context = Object.assign({}, this, meta)
295296
if (!query.vue) {
296297
// main request
297298
return transformMain(
298299
code,
299300
filename,
300301
options,
301-
Object.assign({}, this, meta),
302+
context,
302303
ssr,
303304
customElementFilter(filename)
304305
)
@@ -313,7 +314,7 @@ export default createUnplugin<Options | undefined, false>(
313314
code,
314315
descriptor,
315316
options,
316-
this,
317+
context,
317318
ssr
318319
)
319320
} else if (query.type === 'style') {

src/core/script.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { type SFCDescriptor, type SFCScriptBlock } from 'vue/compiler-sfc'
2+
import { type UnpluginContextMeta } from 'unplugin'
23
import { resolveTemplateCompilerOptions } from './template'
34
import { cache as descriptorCache } from './utils/descriptorCache'
4-
import { type Context, type ResolvedOptions } from '.'
5+
import { type ResolvedOptions } from '.'
56

67
// ssr and non ssr builds would output different script content
78
const clientCache = new WeakMap<SFCDescriptor, SFCScriptBlock | null>()
@@ -50,7 +51,7 @@ export function isUseInlineTemplate(
5051
export const scriptIdentifier = `_sfc_main`
5152

5253
export function resolveScript(
53-
pluginContext: Context,
54+
pluginContext: UnpluginContextMeta,
5455
descriptor: SFCDescriptor,
5556
options: ResolvedOptions,
5657
ssr: boolean
@@ -104,7 +105,7 @@ export function resolveScript(
104105
// If the script is js/ts and has no external src, it can be directly placed
105106
// in the main module. Skip for build
106107
export function canInlineMain(
107-
pluginContext: Context,
108+
pluginContext: UnpluginContextMeta,
108109
descriptor: SFCDescriptor,
109110
options: ResolvedOptions
110111
): boolean {

src/core/template.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@ import {
66
type SFCTemplateCompileOptions,
77
type SFCTemplateCompileResults,
88
} from 'vue/compiler-sfc'
9-
import { type UnpluginContext } from 'unplugin'
10-
import { getResolvedScript } from './script'
9+
import { getResolvedScript, resolveScript } from './script'
1110
import { createRollupError } from './utils/error'
12-
import { type ResolvedOptions } from '.'
11+
import { type Context, type ResolvedOptions } from '.'
1312

1413
// eslint-disable-next-line require-await
1514
export async function transformTemplateAsModule(
1615
code: string,
1716
descriptor: SFCDescriptor,
1817
options: ResolvedOptions,
19-
pluginContext: UnpluginContext,
18+
pluginContext: Context,
2019
ssr: boolean
2120
): Promise<{
2221
code: string
@@ -49,7 +48,7 @@ export function transformTemplateInMain(
4948
code: string,
5049
descriptor: SFCDescriptor,
5150
options: ResolvedOptions,
52-
pluginContext: UnpluginContext,
51+
pluginContext: Context,
5352
ssr: boolean
5453
): SFCTemplateCompileResults {
5554
const result = compile(code, descriptor, options, pluginContext, ssr)
@@ -62,15 +61,15 @@ export function transformTemplateInMain(
6261
}
6362
}
6463

65-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
6664
export function compile(
6765
code: string,
6866
descriptor: SFCDescriptor,
6967
options: ResolvedOptions,
70-
pluginContext: UnpluginContext,
68+
pluginContext: Context,
7169
ssr: boolean
7270
) {
7371
const filename = descriptor.filename
72+
resolveScript(pluginContext, descriptor, options, ssr)
7473
const result = options.compiler.compileTemplate({
7574
...resolveTemplateCompilerOptions(descriptor, options, ssr)!,
7675
source: code,

0 commit comments

Comments
 (0)