diff --git a/packages/vite/src/node/server/moduleGraph.ts b/packages/vite/src/node/server/moduleGraph.ts index 8b11809914d767..f7d49ce5395ef6 100644 --- a/packages/vite/src/node/server/moduleGraph.ts +++ b/packages/vite/src/node/server/moduleGraph.ts @@ -148,21 +148,24 @@ export class ModuleGraph { ): Promise | undefined> { mod.isSelfAccepting = isSelfAccepting const prevImports = mod.importedModules - const nextImports = (mod.importedModules = new Set()) let noLongerImported: Set | undefined + let resolvePromises = [] + let resolveResults = new Array(importedModules.size) + let index = 0 // update import graph for (const imported of importedModules) { + const nextIndex = index++ if (typeof imported === 'string') { resolvePromises.push( this.ensureEntryFromUrl(imported, ssr).then((dep) => { dep.importers.add(mod) - nextImports.add(dep) + resolveResults[nextIndex] = dep }), ) } else { imported.importers.add(mod) - nextImports.add(imported) + resolveResults[nextIndex] = imported } } @@ -170,6 +173,8 @@ export class ModuleGraph { await Promise.all(resolvePromises) } + const nextImports = (mod.importedModules = new Set(resolveResults)) + // remove the importer from deps that were imported but no longer are. prevImports.forEach((dep) => { if (!nextImports.has(dep)) { @@ -182,15 +187,19 @@ export class ModuleGraph { }) // update accepted hmr deps - const deps = (mod.acceptedHmrDeps = new Set()) resolvePromises = [] + resolveResults = new Array(acceptedModules.size) + index = 0 for (const accepted of acceptedModules) { + const nextIndex = index++ if (typeof accepted === 'string') { resolvePromises.push( - this.ensureEntryFromUrl(accepted, ssr).then((dep) => deps.add(dep)), + this.ensureEntryFromUrl(accepted, ssr).then((dep) => { + resolveResults[nextIndex] = dep + }), ) } else { - deps.add(accepted) + resolveResults[nextIndex] = accepted } } @@ -198,6 +207,8 @@ export class ModuleGraph { await Promise.all(resolvePromises) } + mod.acceptedHmrDeps = new Set(resolveResults) + // update accepted hmr exports mod.acceptedHmrExports = acceptedExports mod.importedBindings = importedBindings