From c0d6c60b45d89e0995a5ea6bf74e9e3c023ae828 Mon Sep 17 00:00:00 2001 From: patak Date: Fri, 10 Jun 2022 15:48:59 +0200 Subject: [PATCH] fix: backport outdated optimized dep removed from module graph (#8534) --- packages/vite/src/node/plugins/importAnalysis.ts | 12 +++++++++++- packages/vite/src/node/plugins/optimizedDeps.ts | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysis.ts b/packages/vite/src/node/plugins/importAnalysis.ts index 572a7c9ce80549..b238a3b97f8607 100644 --- a/packages/vite/src/node/plugins/importAnalysis.ts +++ b/packages/vite/src/node/plugins/importAnalysis.ts @@ -50,7 +50,10 @@ import { optimizedDepNeedsInterop } from '../optimizer' import { checkPublicFile } from './asset' -import { ERR_OUTDATED_OPTIMIZED_DEP } from './optimizedDeps' +import { + ERR_OUTDATED_OPTIMIZED_DEP, + throwOutdatedRequest +} from './optimizedDeps' import { isCSSRequest, isDirectCSSRequest } from './css' const isDebug = !!process.env.DEBUG @@ -170,6 +173,13 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { // since we are already in the transform phase of the importer, it must // have been loaded so its entry is guaranteed in the module graph. const importerModule = moduleGraph.getModuleById(importer)! + if (!importerModule && isOptimizedDepFile(importer, config)) { + // Ids of optimized deps could be invalidated and removed from the graph + // Return without transforming, this request is no longer valid, a full reload + // is going to request this id again. Throwing an outdated error so we + // properly finish the request with a 504 sent to the browser. + throwOutdatedRequest(importer) + } if (!imports.length) { importerModule.isSelfAccepting = false diff --git a/packages/vite/src/node/plugins/optimizedDeps.ts b/packages/vite/src/node/plugins/optimizedDeps.ts index 8d4e98b865bf28..30f05ae32eb628 100644 --- a/packages/vite/src/node/plugins/optimizedDeps.ts +++ b/packages/vite/src/node/plugins/optimizedDeps.ts @@ -73,7 +73,7 @@ export function optimizedDepsPlugin(): Plugin { } } -function throwProcessingError(id: string) { +function throwProcessingError(id: string): never { const err: any = new Error( `Something unexpected happened while optimizing "${id}". ` + `The current page should have reloaded by now` @@ -84,7 +84,7 @@ function throwProcessingError(id: string) { throw err } -function throwOutdatedRequest(id: string) { +export function throwOutdatedRequest(id: string): never { const err: any = new Error( `There is a new version of the pre-bundle for "${id}", ` + `a page reload is going to ask for it.`