Compare commits

..

1 Commits

2 changed files with 26 additions and 8 deletions

View File

@ -202,14 +202,20 @@ export async function resolveConfig(
const { main, preload, renderer } = loadResult.config
if (main) {
main.build ??= {}
setupRollupOptionCompat(main.build)
userConfig.main = await new MainConfigFactory(main, config, { outDir, root }).build()
}
if (preload) {
preload.build ??= {}
setupRollupOptionCompat(preload.build)
userConfig.preload = await new PreloadConfigFactory(preload, config, { outDir, root }).build()
}
if (renderer) {
renderer.build ??= {}
setupRollupOptionCompat(renderer.build)
userConfig.renderer = await new RendererConfigFactory(renderer, config, { outDir, root }).build()
}
@ -237,15 +243,20 @@ export async function resolveConfig(
return resolved
}
function setupRollupOptionCompat<T extends Pick<ViteBuildOptions, 'rollupOptions' | 'rolldownOptions'>>(
buildConfig: T
): asserts buildConfig is T & {
rolldownOptions: Exclude<T['rolldownOptions'], undefined>
} {
buildConfig.rolldownOptions ??= buildConfig.rollupOptions
}
export abstract class ConfigFactory<T extends MainViteConfig | PreloadViteConfig | RendererViteConfig> {
constructor(
protected readonly baseConfig: T,
protected readonly inlineConfig: InlineConfig,
protected readonly options: { outDir?: string; root?: string }
) {
baseConfig.build ??= {}
baseConfig.build.rolldownOptions ??= baseConfig.build.rollupOptions
}
) {}
async build(cleanMode?: boolean): Promise<T> {
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */

View File

@ -2,7 +2,7 @@ import path from 'node:path'
import fs from 'node:fs'
import { builtinModules } from 'node:module'
import colors from 'picocolors'
import { type Plugin, type LibraryOptions, type Rolldown, type UserConfig, mergeConfig, normalizePath } from 'vite'
import { type Plugin, type LibraryOptions, type Rolldown, mergeConfig, normalizePath } from 'vite'
import { getElectronNodeTarget, getElectronChromeTarget, supportESM } from '../electron'
import { loadPackageData } from '../utils'
@ -64,6 +64,11 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
const format = pkg.type && pkg.type === 'module' && supportESM() ? 'es' : 'cjs'
const defaultConfig = {
resolve: {
browserField: false,
mainFields: ['module', 'jsnext:main', 'jsnext'],
conditions: ['node']
},
build: {
outDir: path.resolve(root, 'out', 'main'),
target: nodeTarget,
@ -75,7 +80,7 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
reportCompressedSize: false,
minify: false
}
} satisfies UserConfig
}
const build = config.build || {}
const rolldownOptions = build.rolldownOptions || {}
@ -101,6 +106,8 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
const buildConfig = mergeConfig(defaultConfig.build, build)
config.build = buildConfig
config.resolve = mergeConfig(defaultConfig.resolve, config.resolve || {})
config.define = config.define || {}
config.define = { ...processEnvDefine(), ...config.define }
@ -206,7 +213,7 @@ export function electronPreloadConfigPresetPlugin(options?: ElectronPluginOption
reportCompressedSize: false,
minify: false
}
} satisfies UserConfig
}
const build = config.build || {}
const rolldownOptions = build.rolldownOptions || {}
@ -365,7 +372,7 @@ export function electronRendererConfigPresetPlugin(options?: ElectronPluginOptio
minify: false,
emptyOutDir: emptyOutDir()
}
} satisfies UserConfig
}
if (config.build?.outDir) {
config.build.outDir = path.resolve(root, config.build.outDir)