From 6c08c863b552421199321d7178d718220c2f2d39 Mon Sep 17 00:00:00 2001 From: patak Date: Tue, 8 Mar 2022 18:01:18 +0100 Subject: [PATCH] fix: optimizeDeps.include missing in known imports fallback (#7218) --- packages/vite/src/node/build.ts | 5 +- packages/vite/src/node/optimizer/index.ts | 57 +++++++++++++++-------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 8668054480fb45..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 } 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,7 +410,7 @@ async function doBuild( } catch (e) {} if (!knownImports) { // no dev deps optimization data, do a fresh scan - knownImports = Object.keys((await scanImports(config)).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 82f9ed32041b7f..ef32fe97b47203 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -273,25 +273,11 @@ 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)}` - ) - } - } - } + try { + await addManuallyIncludedOptimizeDeps(deps, config) + } catch (e) { + processing.resolve() + throw e } // update browser hash @@ -541,6 +527,39 @@ export async function createOptimizeDepsRun( } } +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 { + 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) => {