The configuration system allows you to define Vite settings for each Electron process (main, preload, renderer) with full TypeScript support and helper functions.
Helper function for creating type-safe Electron Vite configurations.
/**
* Type helper to make it easier to use electron.vite.config files
* @param config - Configuration object or function
* @returns The same configuration with proper typing
*/
function defineConfig(config: ElectronViteConfig): ElectronViteConfig;
function defineConfig(config: Promise<ElectronViteConfig>): Promise<ElectronViteConfig>;
function defineConfig(config: ElectronViteConfigFnObject): ElectronViteConfigFnObject;
function defineConfig(config: ElectronViteConfigExport): ElectronViteConfigExport;
type ElectronViteConfigExport =
| ElectronViteConfig
| Promise<ElectronViteConfig>
| ElectronViteConfigFnObject
| ElectronViteConfigFnPromise
| ElectronViteConfigFn;
type ElectronViteConfigFn = (env: ConfigEnv) => ElectronViteConfig | Promise<ElectronViteConfig>;
interface ConfigEnv {
command: 'build' | 'serve';
mode: string;
}Usage Examples:
// Static configuration
export default defineConfig({
main: {
build: {
outDir: "dist-electron/main"
}
},
preload: {
build: {
outDir: "dist-electron/preload"
}
},
renderer: {
build: {
outDir: "dist-electron/renderer"
}
}
});
// Function-based configuration
export default defineConfig(({ command, mode }) => {
const isProduction = mode === 'production';
return {
main: {
build: {
minify: isProduction,
sourcemap: !isProduction
}
},
renderer: {
base: command === 'serve' ? '/' : './',
build: {
minify: isProduction
}
}
};
});Core configuration interfaces for each Electron process.
interface ElectronViteConfig {
/** Vite config options for electron main process */
main?: ViteConfigExport;
/** Vite config options for electron renderer process */
renderer?: ViteConfigExport;
/** Vite config options for electron preload files */
preload?: ViteConfigExport;
}
interface UserConfig {
/** Vite config options for electron main process */
main?: ViteConfig & { configFile?: string | false };
/** Vite config options for electron renderer process */
renderer?: ViteConfig & { configFile?: string | false };
/** Vite config options for electron preload files */
preload?: ViteConfig & { configFile?: string | false };
}
type InlineConfig = Omit<ViteConfig, 'base'> & {
configFile?: string | false;
envFile?: false;
ignoreConfigWarning?: boolean;
};Load and resolve configuration from files with dependency tracking.
/**
* Resolve configuration from file or inline config
* @param inlineConfig - Inline configuration options
* @param command - Build command type
* @param defaultMode - Default mode if not specified
* @returns Resolved configuration with dependencies
*/
function resolveConfig(
inlineConfig: InlineConfig,
command: 'build' | 'serve',
defaultMode?: string
): Promise<ResolvedConfig>;
/**
* Load configuration from file system
* @param configEnv - Configuration environment context
* @param configFile - Optional config file path
* @param configRoot - Root directory for config resolution
* @param logLevel - Logging level
* @param ignoreConfigWarning - Whether to ignore config warnings
* @returns Configuration with file path and dependencies
*/
function loadConfigFromFile(
configEnv: ConfigEnv,
configFile?: string,
configRoot?: string,
logLevel?: LogLevel,
ignoreConfigWarning?: boolean
): Promise<{
path: string;
config: UserConfig;
dependencies: string[];
}>;
interface ResolvedConfig {
config?: UserConfig;
configFile?: string;
configFileDependencies: string[];
}Re-exported Vite configuration utilities for seamless integration.
// Re-exported from Vite for convenience
function defineViteConfig(config: ViteConfig): ViteConfig;
function mergeConfig(defaults: ViteConfig, overrides: ViteConfig): ViteConfig;
function createLogger(level?: LogLevel): Logger;
type LogLevel = 'info' | 'warn' | 'error' | 'silent';Electron Vite looks for configuration files in this order:
electron.vite.config.jselectron.vite.config.tselectron.vite.config.mjselectron.vite.config.cjselectron.vite.config.mtselectron.vite.config.ctsNote: Configuration files cannot be named vite.config.* to avoid conflicts.
Configuration for the Electron main process, typically includes:
{
main: {
build: {
outDir: 'dist-electron/main',
lib: {
entry: 'src/main/index.ts',
formats: ['cjs']
},
rollupOptions: {
external: ['electron']
}
}
}
}Configuration for preload scripts:
{
preload: {
build: {
outDir: 'dist-electron/preload',
lib: {
entry: 'src/preload/index.ts',
formats: ['cjs']
},
rollupOptions: {
external: ['electron']
}
}
}
}Configuration for renderer processes (web content):
{
renderer: {
root: 'src/renderer',
build: {
outDir: 'dist-electron/renderer'
},
// Standard Vite configuration for web content
plugins: [/* framework plugins */]
}
}