Skip to content

Commit 3104331

Browse files
authored
fix: merge environments.ssr.resolve with root ssr config (#18857)
1 parent a75fc31 commit 3104331

File tree

2 files changed

+137
-7
lines changed

2 files changed

+137
-7
lines changed

packages/vite/src/node/__tests__/config.spec.ts

+122
Original file line numberDiff line numberDiff line change
@@ -359,3 +359,125 @@ describe('resolveConfig', () => {
359359
await resolveConfig({ root: './inc?ud#s', customLogger: logger }, 'build')
360360
})
361361
})
362+
363+
test('config compat 1', async () => {
364+
const config = await resolveConfig(
365+
{
366+
resolve: {
367+
conditions: ['client1'],
368+
},
369+
ssr: {
370+
resolve: {
371+
conditions: ['ssr1'],
372+
},
373+
},
374+
plugins: [
375+
{
376+
name: 'test',
377+
config() {
378+
return {
379+
environments: {
380+
client: {
381+
resolve: {
382+
conditions: ['client2'],
383+
},
384+
},
385+
ssr: {
386+
resolve: {
387+
conditions: ['ssr2'],
388+
},
389+
},
390+
},
391+
}
392+
},
393+
},
394+
],
395+
},
396+
'serve',
397+
)
398+
expect(config.resolve.conditions).toMatchInlineSnapshot(`
399+
[
400+
"client1",
401+
"client2",
402+
]
403+
`)
404+
expect(config.environments.client.resolve.conditions).toMatchInlineSnapshot(`
405+
[
406+
"client1",
407+
"client2",
408+
]
409+
`)
410+
expect(config.ssr.resolve?.conditions).toMatchInlineSnapshot(`
411+
[
412+
"ssr1",
413+
"ssr2",
414+
]
415+
`)
416+
expect(config.environments.ssr.resolve?.conditions).toMatchInlineSnapshot(`
417+
[
418+
"ssr1",
419+
"ssr2",
420+
]
421+
`)
422+
})
423+
424+
test('config compat 2', async () => {
425+
const config = await resolveConfig(
426+
{
427+
environments: {
428+
client: {
429+
resolve: {
430+
conditions: ['client1'],
431+
},
432+
},
433+
ssr: {
434+
resolve: {
435+
conditions: ['ssr1'],
436+
},
437+
},
438+
},
439+
plugins: [
440+
{
441+
name: 'test',
442+
config() {
443+
return {
444+
resolve: {
445+
conditions: ['client2'],
446+
},
447+
ssr: {
448+
resolve: {
449+
conditions: ['ssr2'],
450+
},
451+
},
452+
}
453+
},
454+
},
455+
],
456+
},
457+
'serve',
458+
)
459+
expect(config.resolve.conditions).toMatchInlineSnapshot(`
460+
[
461+
"client2",
462+
"client1",
463+
]
464+
`)
465+
expect(config.environments.client.resolve.conditions).toMatchInlineSnapshot(`
466+
[
467+
"client2",
468+
"client1",
469+
]
470+
`)
471+
expect(config.ssr.resolve?.conditions).toMatchInlineSnapshot(`
472+
[
473+
"ssr2",
474+
"ssr1",
475+
]
476+
`)
477+
expect(config.environments.ssr.resolve?.conditions).toMatchInlineSnapshot(`
478+
[
479+
"ssr2",
480+
"ssr1",
481+
]
482+
`)
483+
})

packages/vite/src/node/config.ts

+15-7
Original file line numberDiff line numberDiff line change
@@ -1083,13 +1083,16 @@ export async function resolveConfig(
10831083
configEnvironmentsSsr.optimizeDeps ?? {},
10841084
)
10851085

1086-
configEnvironmentsSsr.resolve ??= {}
1087-
configEnvironmentsSsr.resolve.conditions ??= config.ssr?.resolve?.conditions
1088-
configEnvironmentsSsr.resolve.externalConditions ??=
1089-
config.ssr?.resolve?.externalConditions
1090-
configEnvironmentsSsr.resolve.mainFields ??= config.ssr?.resolve?.mainFields
1091-
configEnvironmentsSsr.resolve.external ??= config.ssr?.external
1092-
configEnvironmentsSsr.resolve.noExternal ??= config.ssr?.noExternal
1086+
configEnvironmentsSsr.resolve = mergeConfig(
1087+
{
1088+
conditions: config.ssr?.resolve?.conditions,
1089+
externalConditions: config.ssr?.resolve?.externalConditions,
1090+
mainFields: config.ssr?.resolve?.mainFields,
1091+
external: config.ssr?.external,
1092+
noExternal: config.ssr?.noExternal,
1093+
} satisfies EnvironmentResolveOptions,
1094+
configEnvironmentsSsr.resolve ?? {},
1095+
)
10931096
}
10941097

10951098
if (config.build?.ssrEmitAssets !== undefined) {
@@ -1146,6 +1149,11 @@ export async function resolveConfig(
11461149
config.ssr?.target === 'webworker',
11471150
)
11481151

1152+
// Backward compatibility: merge config.environments.client.resolve back into config.resolve
1153+
config.resolve ??= {}
1154+
config.resolve.conditions = config.environments.client.resolve?.conditions
1155+
config.resolve.mainFields = config.environments.client.resolve?.mainFields
1156+
11491157
const resolvedDefaultResolve = resolveResolveOptions(config.resolve, logger)
11501158

11511159
const resolvedEnvironments: Record<string, ResolvedEnvironmentOptions> = {}

0 commit comments

Comments
 (0)