Skip to content

Commit 56b44e9

Browse files
authored
fix: do not run resolveConfig to get Vite configs in user root (#1670)
1 parent 47e1424 commit 56b44e9

File tree

3 files changed

+44
-62
lines changed

3 files changed

+44
-62
lines changed

packages/slidev/node/commands/build.ts

+6-17
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ import { resolve } from 'node:path'
22
import http from 'node:http'
33
import fs from 'fs-extra'
44
import type { InlineConfig, ResolvedConfig } from 'vite'
5-
import { mergeConfig, build as viteBuild } from 'vite'
5+
import { build as viteBuild } from 'vite'
66
import connect from 'connect'
77
import sirv from 'sirv'
88
import type { BuildArgs, ResolvedSlidevOptions } from '@slidev/types'
9-
import { ViteSlidevPlugin } from '../vite'
10-
import { getIndexHtml, mergeViteConfigs } from './shared'
9+
import { getIndexHtml, resolveViteConfigs } from './shared'
1110

1211
export async function build(
1312
options: ResolvedSlidevOptions,
@@ -24,11 +23,9 @@ export async function build(
2423
let config: ResolvedConfig = undefined!
2524

2625
try {
27-
let inlineConfig = await mergeViteConfigs(
26+
const inlineConfig = await resolveViteConfigs(
2827
options,
29-
viteConfig,
30-
<InlineConfig>({
31-
root: options.userRoot,
28+
{
3229
plugins: [
3330
{
3431
name: 'resolve-config',
@@ -40,19 +37,11 @@ export async function build(
4037
build: {
4138
chunkSizeWarningLimit: 2000,
4239
},
43-
}),
40+
} satisfies InlineConfig,
41+
viteConfig,
4442
'build',
4543
)
4644

47-
inlineConfig = mergeConfig(
48-
inlineConfig,
49-
{
50-
plugins: [
51-
await ViteSlidevPlugin(options, inlineConfig.slidev || {}),
52-
],
53-
},
54-
)
55-
5645
await viteBuild(inlineConfig)
5746
}
5847
finally {
+9-26
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,31 @@
11
import { join } from 'node:path'
22
import process from 'node:process'
33
import type { InlineConfig } from 'vite'
4-
import { createServer as createViteServer, mergeConfig } from 'vite'
4+
import { createServer as createViteServer } from 'vite'
55
import type { ResolvedSlidevOptions, SlidevServerOptions } from '@slidev/types'
6-
import { ViteSlidevPlugin } from '../vite'
7-
import { mergeViteConfigs } from './shared'
6+
import { resolveViteConfigs } from './shared'
87

98
export async function createServer(
109
options: ResolvedSlidevOptions,
1110
viteConfig: InlineConfig = {},
12-
serverOptions: SlidevServerOptions = {},
11+
serverOptions?: SlidevServerOptions,
1312
) {
1413
// default open editor to code, #312
1514
process.env.EDITOR = process.env.EDITOR || 'code'
1615

17-
const config = await mergeViteConfigs(
16+
const inlineConfig = await resolveViteConfigs(
1817
options,
19-
viteConfig,
20-
<InlineConfig>({
21-
root: options.userRoot,
18+
{
2219
optimizeDeps: {
2320
entries: [
2421
join(options.clientRoot, 'main.ts'),
2522
],
2623
},
27-
}),
24+
} satisfies InlineConfig,
25+
viteConfig,
2826
'serve',
27+
serverOptions,
2928
)
3029

31-
const server = await createViteServer(
32-
mergeConfig(
33-
config,
34-
{
35-
configFile: false,
36-
plugins: [
37-
await ViteSlidevPlugin(options, config.slidev || {}, serverOptions),
38-
],
39-
define: {
40-
// Fixes Vue production mode breaking PDF Export #1245
41-
__VUE_PROD_DEVTOOLS__: JSON.stringify(true),
42-
},
43-
},
44-
),
45-
)
46-
47-
return server
30+
return await createViteServer(inlineConfig)
4831
}

packages/slidev/node/commands/shared.ts

+29-19
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import { existsSync, promises as fs } from 'node:fs'
22
import { join } from 'node:path'
3-
import { loadConfigFromFile, mergeConfig, resolveConfig } from 'vite'
3+
import { loadConfigFromFile, mergeConfig } from 'vite'
44
import type { ConfigEnv, InlineConfig } from 'vite'
5-
import type { ResolvedSlidevOptions, SlidevData } from '@slidev/types'
5+
import type { ResolvedSlidevOptions, SlidevData, SlidevServerOptions } from '@slidev/types'
66
import MarkdownIt from 'markdown-it'
77
import { slash } from '@antfu/utils'
88
import markdownItLink from '../syntax/markdown-it/markdown-it-link'
99
import { generateGoogleFontsUrl, stringifyMarkdownTokens } from '../utils'
1010
import { toAtFS } from '../resolver'
1111
import { version } from '../../package.json'
12+
import { ViteSlidevPlugin } from '../vite'
1213

1314
export const sharedMd = MarkdownIt({ html: true })
1415
sharedMd.use(markdownItLink)
@@ -72,34 +73,43 @@ export async function getIndexHtml({ entry, clientRoot, roots, data }: ResolvedS
7273
return main
7374
}
7475

75-
export async function mergeViteConfigs(
76-
{ roots, entry }: ResolvedSlidevOptions,
77-
viteConfig: InlineConfig,
78-
config: InlineConfig,
76+
export async function resolveViteConfigs(
77+
options: ResolvedSlidevOptions,
78+
baseConfig: InlineConfig,
79+
overrideConfigs: InlineConfig,
7980
command: 'serve' | 'build',
81+
serverOptions?: SlidevServerOptions,
8082
) {
8183
const configEnv: ConfigEnv = {
82-
mode: 'development',
84+
mode: command === 'build' ? 'production' : 'development',
8385
command,
8486
}
85-
// Merge theme & addon configs
86-
const files = roots.map(i => join(i, 'vite.config.ts'))
87+
// Merge theme & addon & user configs
88+
const files = options.roots.map(i => join(i, 'vite.config.ts'))
8789

88-
for await (const file of files) {
90+
for (const file of files) {
8991
if (!existsSync(file))
9092
continue
9193
const viteConfig = await loadConfigFromFile(configEnv, file)
9294
if (!viteConfig?.config)
9395
continue
94-
config = mergeConfig(config, viteConfig.config)
96+
baseConfig = mergeConfig(baseConfig, viteConfig.config)
9597
}
9698

97-
// Merge viteConfig argument
98-
config = mergeConfig(config, viteConfig)
99-
100-
// Merge local config (slidev options only)
101-
const localConfig = await resolveConfig({}, command, entry)
102-
config = mergeConfig(config, { slidev: localConfig.slidev || {} })
103-
104-
return config
99+
baseConfig = mergeConfig(baseConfig, overrideConfigs)
100+
101+
// Merge common overrides
102+
baseConfig = mergeConfig(baseConfig, {
103+
configFile: false,
104+
root: options.userRoot,
105+
plugins: [
106+
await ViteSlidevPlugin(options, baseConfig.slidev || {}, serverOptions),
107+
],
108+
define: {
109+
// Fixes Vue production mode breaking PDF Export #1245
110+
__VUE_PROD_DEVTOOLS__: false,
111+
},
112+
})
113+
114+
return baseConfig
105115
}

0 commit comments

Comments
 (0)