Skip to content

Commit 826c81a

Browse files
authored
fix: allow nested dependency selector to be used for optimizeDeps.include for SSR (#18506)
1 parent 28cefca commit 826c81a

File tree

3 files changed

+17
-66
lines changed

3 files changed

+17
-66
lines changed

packages/vite/src/node/optimizer/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -842,9 +842,7 @@ export async function addManuallyIncludedOptimizeDeps(
842842
const entry = await resolve(id)
843843
if (entry) {
844844
if (isOptimizable(entry, optimizeDeps)) {
845-
if (!entry.endsWith('?__vite_skip_optimization')) {
846-
deps[normalizedId] = entry
847-
}
845+
deps[normalizedId] = entry
848846
} else {
849847
unableToOptimize(id, 'Cannot optimize dependency')
850848
}

packages/vite/src/node/optimizer/resolve.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ export function createOptimizeDepsIncludeResolver(
1515
const resolve = createBackCompatIdResolver(topLevelConfig, {
1616
asSrc: false,
1717
scan: true,
18-
ssrOptimizeCheck: environment.config.consumer === 'server',
1918
packageCache: new Map(),
2019
})
20+
2121
return async (id: string) => {
2222
const lastArrowIndex = id.lastIndexOf('>')
2323
if (lastArrowIndex === -1) {

packages/vite/src/node/plugins/resolve.ts

Lines changed: 15 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
DEP_VERSION_RE,
1212
ENV_ENTRY,
1313
FS_PREFIX,
14-
OPTIMIZABLE_ENTRY_RE,
1514
SPECIAL_QUERY_RE,
1615
} from '../constants'
1716
import {
@@ -36,7 +35,7 @@ import {
3635
import type { ResolvedEnvironmentOptions } from '../config'
3736
import { optimizedDepInfoFromFile, optimizedDepInfoFromId } from '../optimizer'
3837
import type { DepsOptimizer } from '../optimizer'
39-
import type { DepOptimizationOptions, SSROptions } from '..'
38+
import type { SSROptions } from '..'
4039
import type { PackageCache, PackageData } from '../packages'
4140
import { shouldExternalize } from '../external'
4241
import {
@@ -129,8 +128,6 @@ interface ResolvePluginOptions {
129128
isFromTsImporter?: boolean
130129
// True when resolving during the scan phase to discover dependencies
131130
scan?: boolean
132-
// Appends ?__vite_skip_optimization to the resolved id if shouldn't be optimized
133-
ssrOptimizeCheck?: boolean
134131

135132
/**
136133
* Optimize deps during dev, defaults to false // TODO: Review default
@@ -248,8 +245,6 @@ export function resolvePlugin(
248245
scan: resolveOpts?.scan ?? resolveOptions.scan,
249246
}
250247

251-
const depsOptimizerOptions = this.environment.config.optimizeDeps
252-
253248
const resolvedImports = resolveSubpathImports(id, importer, options)
254249
if (resolvedImports) {
255250
id = resolvedImports
@@ -337,14 +332,7 @@ export function resolvePlugin(
337332
if (
338333
options.webCompatible &&
339334
options.mainFields.includes('browser') &&
340-
(res = tryResolveBrowserMapping(
341-
fsPath,
342-
importer,
343-
options,
344-
true,
345-
undefined,
346-
depsOptimizerOptions,
347-
))
335+
(res = tryResolveBrowserMapping(fsPath, importer, options, true))
348336
) {
349337
return res
350338
}
@@ -436,7 +424,6 @@ export function resolvePlugin(
436424
options,
437425
false,
438426
external,
439-
depsOptimizerOptions,
440427
))
441428
) {
442429
return res
@@ -450,7 +437,6 @@ export function resolvePlugin(
450437
depsOptimizer,
451438
external,
452439
undefined,
453-
depsOptimizerOptions,
454440
))
455441
) {
456442
return res
@@ -742,7 +728,6 @@ export function tryNodeResolve(
742728
depsOptimizer?: DepsOptimizer,
743729
externalize?: boolean,
744730
allowLinkedExternal: boolean = true,
745-
depsOptimizerOptions?: DepOptimizationOptions,
746731
): PartialResolvedId | undefined {
747732
const { root, dedupe, isBuild, preserveSymlinks, packageCache } = options
748733

@@ -846,10 +831,7 @@ export function tryNodeResolve(
846831
return { ...resolved, id: resolvedId, external: true }
847832
}
848833

849-
if (
850-
!options.idOnly &&
851-
((!options.scan && isBuild && !depsOptimizer) || externalize)
852-
) {
834+
if (!options.idOnly && ((!options.scan && isBuild) || externalize)) {
853835
// Resolve package side effects for build so that rollup can better
854836
// perform tree-shaking
855837
return processResult({
@@ -859,70 +841,43 @@ export function tryNodeResolve(
859841
}
860842

861843
if (
862-
!options.ssrOptimizeCheck &&
863-
(!isInNodeModules(resolved) || // linked
864-
!depsOptimizer || // resolving before listening to the server
865-
options.scan) // initial esbuild scan phase
844+
!isInNodeModules(resolved) || // linked
845+
!depsOptimizer || // resolving before listening to the server
846+
options.scan // initial esbuild scan phase
866847
) {
867848
return { id: resolved }
868849
}
869850

870851
// if we reach here, it's a valid dep import that hasn't been optimized.
871-
const isJsType = depsOptimizer
872-
? isOptimizable(resolved, depsOptimizer.options)
873-
: OPTIMIZABLE_ENTRY_RE.test(resolved)
874-
875-
let exclude = depsOptimizer?.options.exclude
876-
if (options.ssrOptimizeCheck) {
877-
// we don't have the depsOptimizer
878-
exclude = depsOptimizerOptions?.exclude
879-
}
852+
const isJsType = isOptimizable(resolved, depsOptimizer.options)
853+
const exclude = depsOptimizer.options.exclude
880854

881855
const skipOptimization =
882-
(!options.ssrOptimizeCheck && depsOptimizer?.options.noDiscovery) ||
856+
depsOptimizer.options.noDiscovery ||
883857
!isJsType ||
884858
(importer && isInNodeModules(importer)) ||
885859
exclude?.includes(pkgId) ||
886860
exclude?.includes(id) ||
887861
SPECIAL_QUERY_RE.test(resolved)
888862

889-
if (options.ssrOptimizeCheck) {
890-
return {
891-
id: skipOptimization
892-
? injectQuery(resolved, `__vite_skip_optimization`)
893-
: resolved,
894-
}
895-
}
896-
897863
if (skipOptimization) {
898864
// excluded from optimization
899865
// Inject a version query to npm deps so that the browser
900866
// can cache it without re-validation, but only do so for known js types.
901867
// otherwise we may introduce duplicated modules for externalized files
902868
// from pre-bundled deps.
903-
if (!isBuild) {
904-
const versionHash = depsOptimizer!.metadata.browserHash
905-
if (versionHash && isJsType) {
906-
resolved = injectQuery(resolved, `v=${versionHash}`)
907-
}
869+
const versionHash = depsOptimizer.metadata.browserHash
870+
if (versionHash && isJsType) {
871+
resolved = injectQuery(resolved, `v=${versionHash}`)
908872
}
909873
} else {
910874
// this is a missing import, queue optimize-deps re-run and
911875
// get a resolved its optimized info
912-
const optimizedInfo = depsOptimizer!.registerMissingImport(id, resolved)
913-
resolved = depsOptimizer!.getOptimizedDepId(optimizedInfo)
876+
const optimizedInfo = depsOptimizer.registerMissingImport(id, resolved)
877+
resolved = depsOptimizer.getOptimizedDepId(optimizedInfo)
914878
}
915879

916-
if (!options.idOnly && !options.scan && isBuild) {
917-
// Resolve package side effects for build so that rollup can better
918-
// perform tree-shaking
919-
return {
920-
id: resolved,
921-
moduleSideEffects: pkg.hasSideEffects(resolved),
922-
}
923-
} else {
924-
return { id: resolved! }
925-
}
880+
return { id: resolved }
926881
}
927882

928883
export async function tryOptimizedResolve(
@@ -1186,7 +1141,6 @@ function tryResolveBrowserMapping(
11861141
options: InternalResolveOptions,
11871142
isFilePath: boolean,
11881143
externalize?: boolean,
1189-
depsOptimizerOptions?: DepOptimizationOptions,
11901144
) {
11911145
let res: string | undefined
11921146
const pkg =
@@ -1205,7 +1159,6 @@ function tryResolveBrowserMapping(
12051159
undefined,
12061160
undefined,
12071161
undefined,
1208-
depsOptimizerOptions,
12091162
)?.id
12101163
: tryFsResolve(path.join(pkg.dir, browserMappedPath), options))
12111164
) {

0 commit comments

Comments
 (0)