|
1 | 1 | import { existsSync, promises as fs } from 'node:fs'
|
2 | 2 | import { join } from 'node:path'
|
3 |
| -import { loadConfigFromFile, mergeConfig, resolveConfig } from 'vite' |
| 3 | +import { loadConfigFromFile, mergeConfig } from 'vite' |
4 | 4 | import type { ConfigEnv, InlineConfig } from 'vite'
|
5 |
| -import type { ResolvedSlidevOptions, SlidevData } from '@slidev/types' |
| 5 | +import type { ResolvedSlidevOptions, SlidevData, SlidevServerOptions } from '@slidev/types' |
6 | 6 | import MarkdownIt from 'markdown-it'
|
7 | 7 | import { slash } from '@antfu/utils'
|
8 | 8 | import markdownItLink from '../syntax/markdown-it/markdown-it-link'
|
9 | 9 | import { generateGoogleFontsUrl, stringifyMarkdownTokens } from '../utils'
|
10 | 10 | import { toAtFS } from '../resolver'
|
11 | 11 | import { version } from '../../package.json'
|
| 12 | +import { ViteSlidevPlugin } from '../vite' |
12 | 13 |
|
13 | 14 | export const sharedMd = MarkdownIt({ html: true })
|
14 | 15 | sharedMd.use(markdownItLink)
|
@@ -72,34 +73,43 @@ export async function getIndexHtml({ entry, clientRoot, roots, data }: ResolvedS
|
72 | 73 | return main
|
73 | 74 | }
|
74 | 75 |
|
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, |
79 | 80 | command: 'serve' | 'build',
|
| 81 | + serverOptions?: SlidevServerOptions, |
80 | 82 | ) {
|
81 | 83 | const configEnv: ConfigEnv = {
|
82 |
| - mode: 'development', |
| 84 | + mode: command === 'build' ? 'production' : 'development', |
83 | 85 | command,
|
84 | 86 | }
|
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')) |
87 | 89 |
|
88 |
| - for await (const file of files) { |
| 90 | + for (const file of files) { |
89 | 91 | if (!existsSync(file))
|
90 | 92 | continue
|
91 | 93 | const viteConfig = await loadConfigFromFile(configEnv, file)
|
92 | 94 | if (!viteConfig?.config)
|
93 | 95 | continue
|
94 |
| - config = mergeConfig(config, viteConfig.config) |
| 96 | + baseConfig = mergeConfig(baseConfig, viteConfig.config) |
95 | 97 | }
|
96 | 98 |
|
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 |
105 | 115 | }
|
0 commit comments