Skip to content

Commit 0a883f7

Browse files
authored
fix: fix hmr of dynamically loaded vue sfc modules in apps with tailwind (#702)
1 parent ecb581a commit 0a883f7

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

packages/plugin-vue/src/handleHotUpdate.ts

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import type { ResolvedOptions } from './index'
2222

2323
const debug = _debug('vite:hmr')
2424

25-
const directRequestRE = /(?:\?|&)direct\b/
26-
2725
/**
2826
* Vite-specific HMR handling
2927
*/
@@ -43,17 +41,19 @@ export async function handleHotUpdate(
4341
const { descriptor } = createDescriptor(file, content, options, true)
4442

4543
let needRerender = false
44+
const nonJsModules = modules.filter((m) => m.type !== 'js')
45+
const jsModules = modules.filter((m) => m.type === 'js')
4646
const affectedModules = new Set<ModuleNode | undefined>(
47-
modules.filter((mod) => mod.type !== 'js'), // this plugin does not handle non-js modules
47+
nonJsModules, // this plugin does not handle non-js modules
4848
)
49-
const mainModule = getMainModule(modules)
50-
const templateModule = modules.find((m) => /type=template/.test(m.url))
49+
const mainModule = getMainModule(jsModules)
50+
const templateModule = jsModules.find((m) => /type=template/.test(m.url))
5151

5252
// trigger resolveScript for descriptor so that we'll have the AST ready
5353
resolveScript(descriptor, options, false, customElement)
5454
const scriptChanged = hasScriptChanged(prevDescriptor, descriptor)
5555
if (scriptChanged) {
56-
affectedModules.add(getScriptModule(modules) || mainModule)
56+
affectedModules.add(getScriptModule(jsModules) || mainModule)
5757
}
5858

5959
if (!isEqualBlock(descriptor.template, prevDescriptor.template)) {
@@ -95,11 +95,10 @@ export async function handleHotUpdate(
9595
const next = nextStyles[i]
9696
if (!prev || !isEqualBlock(prev, next)) {
9797
didUpdateStyle = true
98-
const mod = modules.find(
98+
const mod = jsModules.find(
9999
(m) =>
100100
m.url.includes(`type=style&index=${i}`) &&
101-
m.url.endsWith(`.${next.lang || 'css'}`) &&
102-
!directRequestRE.test(m.url),
101+
m.url.endsWith(`.${next.lang || 'css'}`),
103102
)
104103
if (mod) {
105104
affectedModules.add(mod)
@@ -130,7 +129,7 @@ export async function handleHotUpdate(
130129
const prev = prevCustoms[i]
131130
const next = nextCustoms[i]
132131
if (!prev || !isEqualBlock(prev, next)) {
133-
const mod = modules.find((m) =>
132+
const mod = jsModules.find((m) =>
134133
m.url.includes(`type=${prev.type}&index=${i}`),
135134
)
136135
if (mod) {
@@ -329,9 +328,9 @@ function hasScriptChanged(prev: SFCDescriptor, next: SFCDescriptor): boolean {
329328
return false
330329
}
331330

332-
function getMainModule(modules: ModuleNode[]) {
331+
function getMainModule(jsModules: ModuleNode[]) {
333332
return (
334-
modules
333+
jsModules
335334
.filter((m) => !/type=/.test(m.url) || /type=script/.test(m.url))
336335
// #9341
337336
// We pick the module with the shortest URL in order to pick the module
@@ -342,8 +341,8 @@ function getMainModule(modules: ModuleNode[]) {
342341
)
343342
}
344343

345-
function getScriptModule(modules: ModuleNode[]) {
346-
return modules.find((m) => /type=script.*&lang\.\w+$/.test(m.url))
344+
function getScriptModule(jsModules: ModuleNode[]) {
345+
return jsModules.find((m) => /type=script.*&lang\.\w+$/.test(m.url))
347346
}
348347

349348
export function handleTypeDepChange(

0 commit comments

Comments
 (0)