From 02053a2bfc2db82f277625fdf0563b257ef9c221 Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 28 Jan 2021 13:30:27 -0500 Subject: [PATCH] fix(optimizer): invalidate all modules on deps rebundle --- .../vite/src/node/optimizer/registerMissing.ts | 16 +++------------- packages/vite/src/node/plugins/resolve.ts | 3 ++- packages/vite/src/node/server/index.ts | 4 +--- packages/vite/src/node/server/moduleGraph.ts | 7 +++++++ 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/vite/src/node/optimizer/registerMissing.ts b/packages/vite/src/node/optimizer/registerMissing.ts index 42e4dc5d77fbd9..23746a95f9d193 100644 --- a/packages/vite/src/node/optimizer/registerMissing.ts +++ b/packages/vite/src/node/optimizer/registerMissing.ts @@ -12,7 +12,6 @@ export function createMissingImpoterRegisterFn(server: ViteDevServer) { const { logger } = server.config let knownOptimized = server._optimizeDepsMetadata!.optimized let currentMissing: Record = {} - let currentImporters = new Set() let handle: NodeJS.Timeout let pendingResolve: (() => void) | null = null @@ -64,14 +63,10 @@ export function createMissingImpoterRegisterFn(server: ViteDevServer) { server._pendingReload = pendingResolve = null } - // Importers' cached transform results have stale imports (resolved to + // Cached transform results have stale imports (resolved to // old locations) so they need to be invalidated before the page is // reloaded. - currentImporters.forEach((importer) => { - const mod = server.moduleGraph.getModuleById(importer) - if (mod) server.moduleGraph.invalidateModule(mod) - }) - currentImporters.clear() + server.moduleGraph.invalidateAll() server.ws.send({ type: 'full-reload', @@ -79,14 +74,9 @@ export function createMissingImpoterRegisterFn(server: ViteDevServer) { }) } - return function registerMissingImport( - id: string, - resolved: string, - importer?: string - ) { + return function registerMissingImport(id: string, resolved: string) { if (!knownOptimized[id]) { currentMissing[id] = resolved - if (importer) currentImporters.add(importer) if (handle) clearTimeout(handle) handle = setTimeout(rerun, debounceMs) server._pendingReload = new Promise((r) => { diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 91f331a1935703..8ad3c9d18b7369 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -354,6 +354,7 @@ export function tryNodeResolve( // if we reach here, it's a valid dep import that hasn't been optimzied. const exclude = server.config.optimizeDeps?.exclude if ( + importer?.includes('node_modules') || exclude?.includes(pkgId) || exclude?.includes(id) || isCSSRequest(resolved) || @@ -370,7 +371,7 @@ export function tryNodeResolve( } else { // this is a missing import. // queue optimize-deps re-run. - server._registerMissingImport?.(id, resolved, importer) + server._registerMissingImport?.(id, resolved) } return { id: resolved } } diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index df2e68e3411f24..4753bcd26fda43 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -247,9 +247,7 @@ export interface ViteDevServer { /** * @internal */ - _registerMissingImport: - | ((id: string, resolved: string, importer?: string) => void) - | null + _registerMissingImport: ((id: string, resolved: string) => void) | null /** * @internal */ diff --git a/packages/vite/src/node/server/moduleGraph.ts b/packages/vite/src/node/server/moduleGraph.ts index e1c352328cbbf6..813c9fa5de6b5f 100644 --- a/packages/vite/src/node/server/moduleGraph.ts +++ b/packages/vite/src/node/server/moduleGraph.ts @@ -84,6 +84,13 @@ export class ModuleGraph { invalidateSSRModule(mod, seen) } + invalidateAll() { + const seen = new Set() + this.idToModuleMap.forEach((mod) => { + this.invalidateModule(mod, seen) + }) + } + /** * Update the module graph based on a module's updated imports information * If there are dependencies that no longer have any importers, they are