Compare commits

...

4 Commits

Author SHA1 Message Date
Beans
be4bf5c723
Merge deed6f5891e20a26d4653323067576a7ce77a0c3 into 31965d29724313f84d505e5ba0e493279a895d7b 2026-04-17 22:07:17 +00:00
alex8088
31965d2972 perf: setup rollupOption compatibility via config factory 2026-04-18 01:03:04 +08:00
alex8088
4bede21c81 fix: remove useless preset config 2026-04-18 00:56:23 +08:00
leey0818
deed6f5891 feat(bytecode): support RegExp for chunkAlias option
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:44:03 +09:00
3 changed files with 14 additions and 30 deletions

View File

@ -195,20 +195,14 @@ export async function resolveConfig(
const { main, preload, renderer } = loadResult.config const { main, preload, renderer } = loadResult.config
if (main) { if (main) {
main.build ??= {}
setupRollupOptionCompat(main.build)
userConfig.main = await new MainConfigFactory(main, config, { outDir, root }).build() userConfig.main = await new MainConfigFactory(main, config, { outDir, root }).build()
} }
if (preload) { if (preload) {
preload.build ??= {}
setupRollupOptionCompat(preload.build)
userConfig.preload = await new PreloadConfigFactory(preload, config, { outDir, root }).build() userConfig.preload = await new PreloadConfigFactory(preload, config, { outDir, root }).build()
} }
if (renderer) { if (renderer) {
renderer.build ??= {}
setupRollupOptionCompat(renderer.build)
userConfig.renderer = await new RendererConfigFactory(renderer, config, { outDir, root }).build() userConfig.renderer = await new RendererConfigFactory(renderer, config, { outDir, root }).build()
} }
@ -226,20 +220,15 @@ export async function resolveConfig(
return resolved 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> { export abstract class ConfigFactory<T extends MainViteConfig | PreloadViteConfig | RendererViteConfig> {
constructor( constructor(
protected readonly baseConfig: T, protected readonly baseConfig: T,
protected readonly inlineConfig: InlineConfig, protected readonly inlineConfig: InlineConfig,
protected readonly options: { outDir?: string; root?: string } protected readonly options: { outDir?: string; root?: string }
) {} ) {
baseConfig.build ??= {}
baseConfig.build.rolldownOptions ??= baseConfig.build.rollupOptions
}
async build(cleanMode?: boolean): Promise<T> { async build(cleanMode?: boolean): Promise<T> {
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */

View File

@ -142,7 +142,7 @@ const bytecodeModuleLoaderCode = [
const bytecodeChunkExtensionRE = /.(jsc|cjsc)$/ const bytecodeChunkExtensionRE = /.(jsc|cjsc)$/
export interface BytecodeOptions { export interface BytecodeOptions {
chunkAlias?: string | string[] chunkAlias?: string | string[] | RegExp
transformArrowFunctions?: boolean transformArrowFunctions?: boolean
removeBundleJS?: boolean removeBundleJS?: boolean
protectedStrings?: string[] protectedStrings?: string[]
@ -159,11 +159,13 @@ export function bytecodePlugin(options: BytecodeOptions = {}): Plugin | null {
} }
const { chunkAlias = [], transformArrowFunctions = true, removeBundleJS = true, protectedStrings = [] } = options const { chunkAlias = [], transformArrowFunctions = true, removeBundleJS = true, protectedStrings = [] } = options
const _chunkAlias = Array.isArray(chunkAlias) ? chunkAlias : [chunkAlias] const _chunkAlias = chunkAlias instanceof RegExp ? chunkAlias : Array.isArray(chunkAlias) ? chunkAlias : [chunkAlias]
const transformAllChunks = _chunkAlias.length === 0
const isBytecodeChunk = (chunkName: string): boolean => { const isBytecodeChunk = (chunkName: string): boolean => {
return transformAllChunks || _chunkAlias.some(alias => alias === chunkName) if (_chunkAlias instanceof RegExp) {
return _chunkAlias.test(chunkName)
}
return _chunkAlias.length === 0 || _chunkAlias.some(alias => alias === chunkName)
} }
const plugins: babel.PluginItem[] = [] const plugins: babel.PluginItem[] = []

View File

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