From fa64c8e9cff72797afa148e998f3cdc6274e6743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Thu, 8 Dec 2022 14:13:12 +0900 Subject: [PATCH] refactor(optimizer): await depsOptimizer.scanProcessing (#11251) --- packages/vite/src/node/optimizer/optimizer.ts | 87 +++++++++---------- 1 file changed, 40 insertions(+), 47 deletions(-) diff --git a/packages/vite/src/node/optimizer/optimizer.ts b/packages/vite/src/node/optimizer/optimizer.ts index 7ac32309267de9..2dcb84a3e8f1b9 100644 --- a/packages/vite/src/node/optimizer/optimizer.ts +++ b/packages/vite/src/node/optimizer/optimizer.ts @@ -161,17 +161,12 @@ async function createDepsOptimizer( let firstRunCalled = !!cachedMetadata let postScanOptimizationResult: Promise | undefined - let discoverProjectDependenciesPromise: - | Promise> - | undefined let optimizingNewDeps: Promise | undefined async function close() { closed = true await Promise.allSettled([ - discoverProjectDependenciesPromise?.catch(() => { - /* ignore error for scanner because it's not important */ - }), + depsOptimizer.scanProcessing, postScanOptimizationResult, optimizingNewDeps, ]) @@ -203,52 +198,50 @@ async function createDepsOptimizer( if (!isBuild) { // Important, the scanner is dev only - const scanPhaseProcessing = newDepOptimizationProcessing() - depsOptimizer.scanProcessing = scanPhaseProcessing.promise - // Ensure server listen is called before the scanner - setTimeout(async () => { - try { - debug(colors.green(`scanning for dependencies...`)) - - discoverProjectDependenciesPromise = - discoverProjectDependencies(config) - const deps = await discoverProjectDependenciesPromise - - debug( - colors.green( - Object.keys(deps).length > 0 - ? `dependencies found by scanner: ${depsLogString( - Object.keys(deps), - )}` - : `no dependencies found by scanner`, - ), - ) + depsOptimizer.scanProcessing = new Promise((resolve) => { + // Ensure server listen is called before the scanner + setTimeout(async () => { + try { + debug(colors.green(`scanning for dependencies...`)) + + const deps = await discoverProjectDependencies(config) + + debug( + colors.green( + Object.keys(deps).length > 0 + ? `dependencies found by scanner: ${depsLogString( + Object.keys(deps), + )}` + : `no dependencies found by scanner`, + ), + ) - // Add these dependencies to the discovered list, as these are currently - // used by the preAliasPlugin to support aliased and optimized deps. - // This is also used by the CJS externalization heuristics in legacy mode - for (const id of Object.keys(deps)) { - if (!metadata.discovered[id]) { - addMissingDep(id, deps[id]) + // Add these dependencies to the discovered list, as these are currently + // used by the preAliasPlugin to support aliased and optimized deps. + // This is also used by the CJS externalization heuristics in legacy mode + for (const id of Object.keys(deps)) { + if (!metadata.discovered[id]) { + addMissingDep(id, deps[id]) + } } - } - if (!isBuild) { - const knownDeps = prepareKnownDeps() + if (!isBuild) { + const knownDeps = prepareKnownDeps() - // For dev, we run the scanner and the first optimization - // run on the background, but we wait until crawling has ended - // to decide if we send this result to the browser or we need to - // do another optimize step - postScanOptimizationResult = runOptimizeDeps(config, knownDeps) + // For dev, we run the scanner and the first optimization + // run on the background, but we wait until crawling has ended + // to decide if we send this result to the browser or we need to + // do another optimize step + postScanOptimizationResult = runOptimizeDeps(config, knownDeps) + } + } catch (e) { + logger.error(e.message) + } finally { + resolve() + depsOptimizer.scanProcessing = undefined } - } catch (e) { - logger.error(e.message) - } finally { - scanPhaseProcessing.resolve() - depsOptimizer.scanProcessing = undefined - } - }, 0) + }, 0) + }) } }