From 75bbe9671dc2a831903516b82233491ce3c2d641 Mon Sep 17 00:00:00 2001 From: patak-dev Date: Mon, 7 Mar 2022 23:46:01 +0100 Subject: [PATCH 1/4] fix: optimizeDeps.include missing in known imports fallback --- packages/vite/src/node/build.ts | 6 ++- packages/vite/src/node/optimizer/index.ts | 46 +++++++++++++---------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 8668054480fb45..cd83d1e8fb72fc 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -36,7 +36,7 @@ import { buildImportAnalysisPlugin } from './plugins/importAnalysisBuild' import { resolveSSRExternal, shouldExternalizeForSSR } from './ssr/ssrExternal' import { ssrManifestPlugin } from './ssr/ssrManifestPlugin' import type { DepOptimizationMetadata } from './optimizer' -import { getDepsCacheDir } from './optimizer' +import { getDepsCacheDir, addManuallyIncludedOptimizeDeps } from './optimizer' import { scanImports } from './optimizer/scan' import { assetImportMetaUrlPlugin } from './plugins/assetImportMetaUrl' import { loadFallbackPlugin } from './plugins/loadFallback' @@ -411,7 +411,9 @@ async function doBuild( } catch (e) {} if (!knownImports) { // no dev deps optimization data, do a fresh scan - knownImports = Object.keys((await scanImports(config)).deps) + const deps = (await scanImports(config)).deps + addManuallyIncludedOptimizeDeps(deps, config) + knownImports = Object.keys(deps) } external = resolveExternal( resolveSSRExternal(config, knownImports), diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 82f9ed32041b7f..dfcd50f00759a6 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -273,26 +273,7 @@ export async function createOptimizeDepsRun( ) } - const include = config.optimizeDeps?.include - if (include) { - const resolve = config.createResolver({ asSrc: false }) - for (const id of include) { - // normalize 'foo >bar` as 'foo > bar' to prevent same id being added - // and for pretty printing - const normalizedId = normalizeId(id) - if (!deps[normalizedId]) { - const entry = await resolve(id) - if (entry) { - deps[normalizedId] = entry - } else { - processing.resolve() - throw new Error( - `Failed to resolve force included dependency: ${colors.cyan(id)}` - ) - } - } - } - } + addManuallyIncludedOptimizeDeps(deps, config) // update browser hash metadata.browserHash = getOptimizedBrowserHash(metadata.hash, deps) @@ -541,6 +522,31 @@ export async function createOptimizeDepsRun( } } +export async function addManuallyIncludedOptimizeDeps( + deps: Record, + config: ResolvedConfig +): Promise { + const include = config.optimizeDeps?.include + if (include) { + const resolve = config.createResolver({ asSrc: false }) + for (const id of include) { + // normalize 'foo >bar` as 'foo > bar' to prevent same id being added + // and for pretty printing + const normalizedId = normalizeId(id) + if (!deps[normalizedId]) { + const entry = await resolve(id) + if (entry) { + deps[normalizedId] = entry + } else { + throw new Error( + `Failed to resolve force included dependency: ${colors.cyan(id)}` + ) + } + } + } + } +} + export function newDepOptimizationProcessing(): DepOptimizationProcessing { let resolve: (result?: DepOptimizationResult) => void const promise = new Promise((_resolve) => { From 56787d847cc0d94d4e3d0f2b99a3ecc2569e4b57 Mon Sep 17 00:00:00 2001 From: patak-dev Date: Mon, 7 Mar 2022 23:52:30 +0100 Subject: [PATCH 2/4] fix: missing await --- packages/vite/src/node/build.ts | 2 +- packages/vite/src/node/optimizer/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index cd83d1e8fb72fc..b701de49201583 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -412,7 +412,7 @@ async function doBuild( if (!knownImports) { // no dev deps optimization data, do a fresh scan const deps = (await scanImports(config)).deps - addManuallyIncludedOptimizeDeps(deps, config) + await addManuallyIncludedOptimizeDeps(deps, config) knownImports = Object.keys(deps) } external = resolveExternal( diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index dfcd50f00759a6..9edd1a24ab9621 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -273,7 +273,7 @@ export async function createOptimizeDepsRun( ) } - addManuallyIncludedOptimizeDeps(deps, config) + await addManuallyIncludedOptimizeDeps(deps, config) // update browser hash metadata.browserHash = getOptimizedBrowserHash(metadata.hash, deps) From b832dbe54d696b5392353fb7917e30fe1277acf4 Mon Sep 17 00:00:00 2001 From: patak-dev Date: Tue, 8 Mar 2022 06:41:26 +0100 Subject: [PATCH 3/4] fix: add back processing.resolve after error --- packages/vite/src/node/optimizer/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 9edd1a24ab9621..c080d82330f34a 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -273,7 +273,12 @@ export async function createOptimizeDepsRun( ) } - await addManuallyIncludedOptimizeDeps(deps, config) + try { + await addManuallyIncludedOptimizeDeps(deps, config) + } catch (e) { + processing.resolve() + throw e + } // update browser hash metadata.browserHash = getOptimizedBrowserHash(metadata.hash, deps) From d1ec9d258a42bb460932d7a951a1426f893e2482 Mon Sep 17 00:00:00 2001 From: patak-dev Date: Tue, 8 Mar 2022 09:51:11 +0100 Subject: [PATCH 4/4] chore: update --- packages/vite/src/node/build.ts | 7 ++----- packages/vite/src/node/optimizer/index.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index b701de49201583..7f0b014659b221 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -36,8 +36,7 @@ import { buildImportAnalysisPlugin } from './plugins/importAnalysisBuild' import { resolveSSRExternal, shouldExternalizeForSSR } from './ssr/ssrExternal' import { ssrManifestPlugin } from './ssr/ssrManifestPlugin' import type { DepOptimizationMetadata } from './optimizer' -import { getDepsCacheDir, addManuallyIncludedOptimizeDeps } from './optimizer' -import { scanImports } from './optimizer/scan' +import { getDepsCacheDir, findKnownImports } from './optimizer' import { assetImportMetaUrlPlugin } from './plugins/assetImportMetaUrl' import { loadFallbackPlugin } from './plugins/loadFallback' import { watchPackageDataPlugin } from './packages' @@ -411,9 +410,7 @@ async function doBuild( } catch (e) {} if (!knownImports) { // no dev deps optimization data, do a fresh scan - const deps = (await scanImports(config)).deps - await addManuallyIncludedOptimizeDeps(deps, config) - knownImports = Object.keys(deps) + knownImports = await findKnownImports(config) } external = resolveExternal( resolveSSRExternal(config, knownImports), diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index c080d82330f34a..ef32fe97b47203 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -527,7 +527,15 @@ export async function createOptimizeDepsRun( } } -export async function addManuallyIncludedOptimizeDeps( +export async function findKnownImports( + config: ResolvedConfig +): Promise { + const deps = (await scanImports(config)).deps + await addManuallyIncludedOptimizeDeps(deps, config) + return Object.keys(deps) +} + +async function addManuallyIncludedOptimizeDeps( deps: Record, config: ResolvedConfig ): Promise {