From a8b6428d16cb69bf591599df6d905e68be56081e Mon Sep 17 00:00:00 2001 From: dominikg Date: Wed, 7 Dec 2022 14:56:32 +0100 Subject: [PATCH 1/2] refactor: use single build with virtual import file instead of starting n builds --- packages/vite/src/node/optimizer/scan.ts | 27 ++++++++++++------------ 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index f4f5da083e41bb..9cddac198cb2c3 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -106,20 +106,19 @@ export async function scanImports(config: ResolvedConfig): Promise<{ const { plugins = [], ...esbuildOptions } = config.optimizeDeps?.esbuildOptions ?? {} - await Promise.all( - entries.map((entry) => - build({ - absWorkingDir: process.cwd(), - write: false, - entryPoints: [entry], - bundle: true, - format: 'esm', - logLevel: 'error', - plugins: [...plugins, plugin], - ...esbuildOptions, - }), - ), - ) + await build({ + absWorkingDir: process.cwd(), + write: false, + stdin: { + contents: entries.map((e) => `import '${e}'`).join('\n'), + loader: 'js', + }, + bundle: true, + format: 'esm', + logLevel: 'error', + plugins: [...plugins, plugin], + ...esbuildOptions, + }) debug(`Scan completed in ${(performance.now() - start).toFixed(2)}ms:`, deps) From f30d84995ff6f11028eb3686c59d4ba70c4237a0 Mon Sep 17 00:00:00 2001 From: dominikg Date: Wed, 7 Dec 2022 19:10:28 +0100 Subject: [PATCH 2/2] fix: use allSettled to avoid premature exit if a promise rejects --- packages/vite/src/node/optimizer/optimizer.ts | 12 +++++++----- packages/vite/src/node/server/index.ts | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/optimizer/optimizer.ts b/packages/vite/src/node/optimizer/optimizer.ts index a791f8a1dd45b5..7ac32309267de9 100644 --- a/packages/vite/src/node/optimizer/optimizer.ts +++ b/packages/vite/src/node/optimizer/optimizer.ts @@ -168,11 +168,13 @@ async function createDepsOptimizer( let optimizingNewDeps: Promise | undefined async function close() { closed = true - await discoverProjectDependenciesPromise?.catch(() => { - /* ignore error for scanner because it's not important */ - }) - await postScanOptimizationResult - await optimizingNewDeps + await Promise.allSettled([ + discoverProjectDependenciesPromise?.catch(() => { + /* ignore error for scanner because it's not important */ + }), + postScanOptimizationResult, + optimizingNewDeps, + ]) } if (!cachedMetadata) { diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 795c9ea5246042..e5121d6a84c06d 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -410,7 +410,7 @@ export async function createServer( process.stdin.off('end', exitProcess) } } - await Promise.all([ + await Promise.allSettled([ watcher.close(), ws.close(), container.close(),