Skip to content

Commit 1ac22de

Browse files
authored
refactor: optimizeDeps back to top level (#18465)
1 parent 24befe8 commit 1ac22de

File tree

12 files changed

+54
-66
lines changed

12 files changed

+54
-66
lines changed

docs/.vitepress/config.ts

+7-13
Original file line numberDiff line numberDiff line change
@@ -456,19 +456,13 @@ export default defineConfig({
456456
},
457457
}),
458458
],
459-
environments: {
460-
client: {
461-
dev: {
462-
optimizeDeps: {
463-
include: [
464-
'@shikijs/vitepress-twoslash/client',
465-
'gsap',
466-
'gsap/dist/ScrollTrigger',
467-
'gsap/dist/MotionPathPlugin',
468-
],
469-
},
470-
},
471-
},
459+
optimizeDeps: {
460+
include: [
461+
'@shikijs/vitepress-twoslash/client',
462+
'gsap',
463+
'gsap/dist/ScrollTrigger',
464+
'gsap/dist/MotionPathPlugin',
465+
],
472466
},
473467
},
474468
buildEnd,

docs/guide/api-environment.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ export default {
3838
},
3939
},
4040
ssr: {
41-
dev: {
42-
optimizeDeps: {}, // configure the SSR environment
43-
},
41+
optimizeDeps: {}, // configure the SSR environment
4442
},
4543
rsc: {
4644
resolve: {
@@ -61,7 +59,7 @@ export default {
6159
}
6260
```
6361

64-
The `EnvironmentOptions` interface exposes all the per-environment options. There are `SharedEnvironmentOptions` that apply to both `build` and `dev`, like `resolve`. And there are `DevEnvironmentOptions` and `BuildEnvironmentOptions` for dev and build specific options (like `dev.optimizeDeps` or `build.outDir`).
62+
The `EnvironmentOptions` interface exposes all the per-environment options. There are `SharedEnvironmentOptions` that apply to both `build` and `dev`, like `resolve`. And there are `DevEnvironmentOptions` and `BuildEnvironmentOptions` for dev and build specific options (like `optimizeDeps` or `build.outDir`).
6563

6664
```ts
6765
interface EnvironmentOptions extends SharedEnvironmentOptions {

packages/vite/src/node/baseEnvironment.ts

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function getDefaultResolvedEnvironmentOptions(
1818
resolve: config.resolve,
1919
consumer: 'server',
2020
webCompatible: false,
21+
optimizeDeps: config.optimizeDeps,
2122
dev: config.dev,
2223
build: config.build,
2324
}

packages/vite/src/node/config.ts

+24-27
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,6 @@ export interface DevEnvironmentOptions {
170170
| false
171171
| ((sourcePath: string, sourcemapPath: string) => boolean)
172172

173-
/**
174-
* Optimize deps config
175-
*/
176-
optimizeDeps?: DepOptimizationOptions
177-
178173
/**
179174
* create the Dev Environment instance
180175
*/
@@ -251,6 +246,10 @@ export interface SharedEnvironmentOptions {
251246
* Temporal options, we should remove these in favor of fine-grained control
252247
*/
253248
webCompatible?: boolean // was ssr.target === 'webworker'
249+
/**
250+
* Optimize deps config
251+
*/
252+
optimizeDeps?: DepOptimizationOptions
254253
}
255254

256255
export interface EnvironmentOptions extends SharedEnvironmentOptions {
@@ -271,6 +270,7 @@ export type ResolvedEnvironmentOptions = {
271270
resolve: ResolvedResolveOptions
272271
consumer: 'client' | 'server'
273272
webCompatible: boolean
273+
optimizeDeps: DepOptimizationOptions
274274
dev: ResolvedDevEnvironmentOptions
275275
build: ResolvedBuildEnvironmentOptions
276276
}
@@ -589,7 +589,6 @@ export type ResolvedConfig = Readonly<
589589

590590
export function resolveDevEnvironmentOptions(
591591
dev: DevEnvironmentOptions | undefined,
592-
preserverSymlinks: boolean,
593592
environmentName: string | undefined,
594593
consumer: 'client' | 'server' | undefined,
595594
// Backward compatibility
@@ -603,11 +602,6 @@ export function resolveDevEnvironmentOptions(
603602
: dev?.sourcemapIgnoreList || isInNodeModules,
604603
preTransformRequests: dev?.preTransformRequests ?? consumer === 'client',
605604
warmup: dev?.warmup ?? [],
606-
optimizeDeps: resolveDepOptimizationOptions(
607-
dev?.optimizeDeps,
608-
preserverSymlinks,
609-
consumer,
610-
),
611605
createEnvironment:
612606
dev?.createEnvironment ??
613607
(environmentName === 'client'
@@ -646,9 +640,13 @@ function resolveEnvironmentOptions(
646640
resolve,
647641
consumer,
648642
webCompatible: options.webCompatible ?? consumer === 'client',
643+
optimizeDeps: resolveDepOptimizationOptions(
644+
options.optimizeDeps,
645+
resolve.preserveSymlinks,
646+
consumer,
647+
),
649648
dev: resolveDevEnvironmentOptions(
650649
options.dev,
651-
resolve.preserveSymlinks,
652650
environmentName,
653651
consumer,
654652
skipSsrTransform,
@@ -911,13 +909,8 @@ export async function resolveConfig(
911909

912910
checkBadCharactersInPath(resolvedRoot, logger)
913911

914-
// Backward compatibility: merge optimizeDeps into environments.client.dev.optimizeDeps as defaults
915912
const configEnvironmentsClient = config.environments!.client!
916913
configEnvironmentsClient.dev ??= {}
917-
configEnvironmentsClient.dev.optimizeDeps = mergeConfig(
918-
config.optimizeDeps ?? {},
919-
configEnvironmentsClient.dev.optimizeDeps ?? {},
920-
)
921914

922915
const deprecatedSsrOptimizeDepsConfig = config.ssr?.optimizeDeps ?? {}
923916
let configEnvironmentsSsr = config.environments!.ssr
@@ -935,10 +928,9 @@ export async function resolveConfig(
935928

936929
// Backward compatibility: merge ssr into environments.ssr.config as defaults
937930
if (configEnvironmentsSsr) {
938-
configEnvironmentsSsr.dev ??= {}
939-
configEnvironmentsSsr.dev.optimizeDeps = mergeConfig(
931+
configEnvironmentsSsr.optimizeDeps = mergeConfig(
940932
deprecatedSsrOptimizeDepsConfig,
941-
configEnvironmentsSsr.dev.optimizeDeps ?? {},
933+
configEnvironmentsSsr.optimizeDeps ?? {},
942934
)
943935

944936
configEnvironmentsSsr.resolve ??= {}
@@ -972,9 +964,16 @@ export async function resolveConfig(
972964

973965
// Merge default environment config values
974966
const defaultEnvironmentOptions = getDefaultEnvironmentOptions(config)
967+
// Some top level options only apply to the client environment
968+
const defaultClientEnvironmentOptions = {
969+
...defaultEnvironmentOptions,
970+
optimizeDeps: config.optimizeDeps,
971+
}
975972
for (const name of Object.keys(config.environments)) {
976973
config.environments[name] = mergeConfig(
977-
defaultEnvironmentOptions,
974+
name === 'client'
975+
? defaultClientEnvironmentOptions
976+
: defaultEnvironmentOptions,
978977
config.environments[name],
979978
)
980979
}
@@ -995,16 +994,15 @@ export async function resolveConfig(
995994
)
996995
}
997996

998-
// Backward compatibility: merge environments.client.dev.optimizeDeps back into optimizeDeps
997+
// Backward compatibility: merge environments.client.optimizeDeps back into optimizeDeps
999998
// The same object is assigned back for backward compatibility. The ecosystem is modifying
1000999
// optimizeDeps in the ResolvedConfig hook, so these changes will be reflected on the
10011000
// client environment.
10021001
const backwardCompatibleOptimizeDeps =
1003-
resolvedEnvironments.client.dev.optimizeDeps
1002+
resolvedEnvironments.client.optimizeDeps
10041003

10051004
const resolvedDevEnvironmentOptions = resolveDevEnvironmentOptions(
10061005
config.dev,
1007-
resolvedDefaultResolve.preserveSymlinks,
10081006
// default environment options
10091007
undefined,
10101008
undefined,
@@ -1022,7 +1020,7 @@ export async function resolveConfig(
10221020
...config.ssr,
10231021
external: resolvedEnvironments.ssr?.resolve.external,
10241022
noExternal: resolvedEnvironments.ssr?.resolve.noExternal,
1025-
optimizeDeps: resolvedEnvironments.ssr?.dev?.optimizeDeps,
1023+
optimizeDeps: resolvedEnvironments.ssr?.optimizeDeps,
10261024
resolve: {
10271025
...config.ssr?.resolve,
10281026
conditions: resolvedEnvironments.ssr?.resolve.conditions,
@@ -1230,10 +1228,9 @@ export async function resolveConfig(
12301228
},
12311229
future: config.future,
12321230

1233-
// Backward compatibility, users should use environment.config.dev.optimizeDeps
1234-
optimizeDeps: backwardCompatibleOptimizeDeps,
12351231
ssr,
12361232

1233+
optimizeDeps: backwardCompatibleOptimizeDeps,
12371234
resolve: resolvedDefaultResolve,
12381235
dev: resolvedDevEnvironmentOptions,
12391236
build: resolvedBuildOptions,

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function esbuildDepPlugin(
5353
external: string[],
5454
): Plugin {
5555
const { isProduction } = environment.config
56-
const { extensions } = environment.config.dev.optimizeDeps
56+
const { extensions } = environment.config.optimizeDeps
5757

5858
// remove optimizable extensions from `externalTypes` list
5959
const allExternalTypes = extensions

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ export async function optimizeExplicitEnvironmentDeps(
288288
): Promise<DepOptimizationMetadata> {
289289
const cachedMetadata = await loadCachedDepOptimizationMetadata(
290290
environment,
291-
environment.config.dev.optimizeDeps.force ?? false,
291+
environment.config.optimizeDeps.force ?? false,
292292
false,
293293
)
294294
if (cachedMetadata) {
@@ -729,7 +729,7 @@ async function prepareEsbuildOptimizerRun(
729729
const flatIdDeps: Record<string, string> = {}
730730
const idToExports: Record<string, ExportsData> = {}
731731

732-
const { optimizeDeps } = environment.config.dev
732+
const { optimizeDeps } = environment.config
733733

734734
const { plugins: pluginsFromConfig = [], ...esbuildOptions } =
735735
optimizeDeps?.esbuildOptions ?? {}
@@ -812,7 +812,7 @@ export async function addManuallyIncludedOptimizeDeps(
812812
deps: Record<string, string>,
813813
): Promise<void> {
814814
const { logger } = environment
815-
const { optimizeDeps } = environment.config.dev
815+
const { optimizeDeps } = environment.config
816816
const optimizeDepsInclude = optimizeDeps?.include ?? []
817817
if (optimizeDepsInclude.length) {
818818
const unableToOptimize = (id: string, msg: string) => {
@@ -1059,7 +1059,7 @@ export async function extractExportsData(
10591059
): Promise<ExportsData> {
10601060
await init
10611061

1062-
const { optimizeDeps } = environment.config.dev
1062+
const { optimizeDeps } = environment.config
10631063

10641064
const esbuildOptions = optimizeDeps?.esbuildOptions ?? {}
10651065
if (optimizeDeps.extensions?.some((ext) => filePath.endsWith(ext))) {
@@ -1112,7 +1112,7 @@ function needsInterop(
11121112
exportsData: ExportsData,
11131113
output?: { exports: string[] },
11141114
): boolean {
1115-
if (environment.config.dev.optimizeDeps?.needsInterop?.includes(id)) {
1115+
if (environment.config.optimizeDeps?.needsInterop?.includes(id)) {
11161116
return true
11171117
}
11181118
const { hasModuleSyntax, exports } = exportsData
@@ -1156,7 +1156,7 @@ function getConfigHash(environment: Environment): string {
11561156
// Take config into account
11571157
// only a subset of config options that can affect dep optimization
11581158
const { config } = environment
1159-
const { optimizeDeps } = config.dev
1159+
const { optimizeDeps } = config
11601160
const content = JSON.stringify(
11611161
{
11621162
mode: process.env.NODE_ENV || config.mode,

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function createDepsOptimizer(
4444

4545
let closed = false
4646

47-
const options = environment.config.dev.optimizeDeps
47+
const options = environment.config.optimizeDeps
4848

4949
const { noDiscovery, holdUntilCrawlEnd } = options
5050

@@ -748,7 +748,7 @@ export function createExplicitDepsOptimizer(
748748
run: () => {},
749749

750750
close: async () => {},
751-
options: environment.config.dev.optimizeDeps,
751+
options: environment.config.optimizeDeps,
752752
}
753753

754754
let inited = false

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export function scanImports(environment: ScanEnvironment): {
147147
entries = computedEntries
148148

149149
if (!entries.length) {
150-
if (!config.optimizeDeps.entries && !config.dev.optimizeDeps.include) {
150+
if (!config.optimizeDeps.entries && !config.optimizeDeps.include) {
151151
environment.logger.warn(
152152
colors.yellow(
153153
'(!) Could not auto-determine entry point from rollupOptions or html files ' +
@@ -247,7 +247,7 @@ export function scanImports(environment: ScanEnvironment): {
247247
async function computeEntries(environment: ScanEnvironment) {
248248
let entries: string[] = []
249249

250-
const explicitEntryPatterns = environment.config.dev.optimizeDeps.entries
250+
const explicitEntryPatterns = environment.config.optimizeDeps.entries
251251
const buildInput = environment.config.build.rollupOptions?.input
252252

253253
if (explicitEntryPatterns) {
@@ -283,7 +283,7 @@ async function computeEntries(environment: ScanEnvironment) {
283283
// dependencies.
284284
entries = entries.filter(
285285
(entry) =>
286-
isScannable(entry, environment.config.dev.optimizeDeps.extensions) &&
286+
isScannable(entry, environment.config.optimizeDeps.extensions) &&
287287
fs.existsSync(entry),
288288
)
289289

@@ -302,7 +302,7 @@ async function prepareEsbuildScanner(
302302
const plugin = esbuildScanPlugin(environment, deps, missing, entries)
303303

304304
const { plugins = [], ...esbuildOptions } =
305-
environment.config.dev.optimizeDeps.esbuildOptions ?? {}
305+
environment.config.optimizeDeps.esbuildOptions ?? {}
306306

307307
// The plugin pipeline automatically loads the closest tsconfig.json.
308308
// But esbuild doesn't support reading tsconfig.json if the plugin has resolved the path (https://github.com/evanw/esbuild/issues/2265).
@@ -356,7 +356,7 @@ function globEntries(pattern: string | string[], environment: ScanEnvironment) {
356356
'**/node_modules/**',
357357
`**/${environment.config.build.outDir}/**`,
358358
// if there aren't explicit entries, also ignore other common folders
359-
...(environment.config.dev.optimizeDeps.entries
359+
...(environment.config.optimizeDeps.entries
360360
? []
361361
: [`**/__tests__/**`, `**/coverage/**`]),
362362
],
@@ -409,7 +409,7 @@ function esbuildScanPlugin(
409409
return res
410410
}
411411

412-
const optimizeDepsOptions = environment.config.dev.optimizeDeps
412+
const optimizeDepsOptions = environment.config.optimizeDeps
413413
const include = optimizeDepsOptions.include
414414
const exclude = [
415415
...(optimizeDepsOptions.exclude ?? []),

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export async function resolvePlugins(
4040
const depOptimizationEnabled =
4141
!isBuild &&
4242
Object.values(config.environments).some(
43-
(environment) => !isDepOptimizationDisabled(environment.dev.optimizeDeps),
43+
(environment) => !isDepOptimizationDisabled(environment.optimizeDeps),
4444
)
4545

4646
return [

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ export function resolvePlugin(
243243
scan: resolveOpts?.scan ?? resolveOptions.scan,
244244
}
245245

246-
const depsOptimizerOptions = this.environment.config.dev.optimizeDeps
246+
const depsOptimizerOptions = this.environment.config.optimizeDeps
247247

248248
const resolvedImports = resolveSubpathImports(id, importer, options)
249249
if (resolvedImports) {

packages/vite/src/node/server/environment.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class DevEnvironment extends BaseEnvironment {
131131
})
132132
})
133133

134-
const { optimizeDeps } = this.config.dev
134+
const { optimizeDeps } = this.config
135135
if (context.depsOptimizer) {
136136
this.depsOptimizer = context.depsOptimizer
137137
} else if (isDepOptimizationDisabled(optimizeDeps)) {

playground/environment-react-ssr/vite.config.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@ export default defineConfig((env) => ({
3333
},
3434
},
3535
ssr: {
36-
dev: {
37-
optimizeDeps: {
38-
noDiscovery: false,
39-
},
36+
optimizeDeps: {
37+
noDiscovery: false,
4038
},
4139
build: {
4240
outDir: 'dist/server',

0 commit comments

Comments
 (0)