From da6ba09035e3cf59302954a45570727bf612d164 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Sat, 15 Jul 2023 15:21:50 -0400 Subject: [PATCH 1/2] fix(optimizer): avoid race condition when discovery is disabled When configured with `noDiscovery: true`, the initial static optimization run needs to be properly tracked in order for subsequent requests to complete properly. --- packages/vite/src/node/optimizer/optimizer.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/optimizer/optimizer.ts b/packages/vite/src/node/optimizer/optimizer.ts index 1ba95b5ffca274..8c721343ac0e6e 100644 --- a/packages/vite/src/node/optimizer/optimizer.ts +++ b/packages/vite/src/node/optimizer/optimizer.ts @@ -220,7 +220,8 @@ async function createDepsOptimizer( if (config.optimizeDeps.noDiscovery) { // We don't need to scan for dependencies or wait for the static crawl to end // Run the first optimization run immediately - runOptimizer() + const knownDeps = prepareKnownDeps() + optimizationResult = runOptimizeDeps(config, knownDeps) } else if (!isBuild) { // Important, the scanner is dev only depsOptimizer.scanProcessing = new Promise((resolve) => { From c41fab1c77d989b92451d28344b1876625633115 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Tue, 25 Jul 2023 14:39:52 -0400 Subject: [PATCH 2/2] refactor: when discovery is disabled, bail during onCrawlEnd --- packages/vite/src/node/optimizer/optimizer.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/optimizer/optimizer.ts b/packages/vite/src/node/optimizer/optimizer.ts index 8c721343ac0e6e..84f1575e1ec755 100644 --- a/packages/vite/src/node/optimizer/optimizer.ts +++ b/packages/vite/src/node/optimizer/optimizer.ts @@ -220,8 +220,7 @@ async function createDepsOptimizer( if (config.optimizeDeps.noDiscovery) { // We don't need to scan for dependencies or wait for the static crawl to end // Run the first optimization run immediately - const knownDeps = prepareKnownDeps() - optimizationResult = runOptimizeDeps(config, knownDeps) + runOptimizer() } else if (!isBuild) { // Important, the scanner is dev only depsOptimizer.scanProcessing = new Promise((resolve) => { @@ -626,7 +625,7 @@ async function createDepsOptimizer( // It normally should be over by the time crawling of user code ended await depsOptimizer.scanProcessing - if (!isBuild && optimizationResult) { + if (!isBuild && optimizationResult && !config.optimizeDeps.noDiscovery) { const result = await optimizationResult.result optimizationResult = undefined currentlyProcessing = false