Skip to content

Commit 05bd96e

Browse files
authored
fix: handle HMR for files with more than one glob import (#3497)
1 parent b31604e commit 05bd96e

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

packages/vite/src/node/plugins/importAnalysis.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,16 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin {
300300
str().prepend(importsString)
301301
str().overwrite(expStart, endIndex, exp)
302302
imports.forEach((url) => importedUrls.add(url.replace(base, '/')))
303-
server._globImporters[importerModule.file!] = {
304-
module: importerModule,
303+
if (!(importerModule.file! in server._globImporters)) {
304+
server._globImporters[importerModule.file!] = {
305+
module: importerModule,
306+
importGlobs: []
307+
}
308+
}
309+
server._globImporters[importerModule.file!].importGlobs.push({
305310
base,
306311
pattern
307-
}
312+
})
308313
}
309314
continue
310315
}

packages/vite/src/node/server/hmr.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,16 @@ export async function handleFileAddUnlink(
177177
delete server._globImporters[file]
178178
} else {
179179
for (const i in server._globImporters) {
180-
const { module, base, pattern } = server._globImporters[i]
181-
const relative = path.relative(base, file)
182-
if (match(relative, pattern)) {
183-
modules.push(module)
184-
// We use `onFileChange` to invalidate `module.file` so that subsequent `ssrLoadModule()`
185-
// calls get fresh glob import results with(out) the newly added(/removed) `file`.
186-
server.moduleGraph.onFileChange(module.file!)
180+
const { module, importGlobs } = server._globImporters[i]
181+
for (const { base, pattern } of importGlobs) {
182+
const relative = path.relative(base, file)
183+
if (match(relative, pattern)) {
184+
modules.push(module)
185+
// We use `onFileChange` to invalidate `module.file` so that subsequent `ssrLoadModule()`
186+
// calls get fresh glob import results with(out) the newly added(/removed) `file`.
187+
server.moduleGraph.onFileChange(module.file!)
188+
break
189+
}
187190
}
188191
}
189192
}

packages/vite/src/node/server/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,11 @@ export interface ViteDevServer {
273273
_globImporters: Record<
274274
string,
275275
{
276-
base: string
277-
pattern: string
278276
module: ModuleNode
277+
importGlobs: {
278+
base: string
279+
pattern: string
280+
}[]
279281
}
280282
>
281283
/**

0 commit comments

Comments
 (0)