mirror of
https://github.com/alex8088/electron-vite.git
synced 2026-06-04 21:05:23 +08:00
fix!: compatible with rollupOptions and rolldownOptions
This commit is contained in:
parent
2765eea74d
commit
5333d5216a
@ -195,14 +195,20 @@ 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()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,6 +226,14 @@ 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,
|
||||||
|
|||||||
@ -205,7 +205,7 @@ export function bytecodePlugin(options: BytecodeOptions = {}): Plugin | null {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
const build = config.build
|
const build = config.build
|
||||||
const resolvedOutputs = resolveBuildOutputs(build.rollupOptions.output, build.lib)
|
const resolvedOutputs = resolveBuildOutputs(build.rolldownOptions.output, build.lib)
|
||||||
if (resolvedOutputs) {
|
if (resolvedOutputs) {
|
||||||
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
||||||
const output = outputs[0]
|
const output = outputs[0]
|
||||||
@ -213,7 +213,7 @@ export function bytecodePlugin(options: BytecodeOptions = {}): Plugin | null {
|
|||||||
config.logger.warn(
|
config.logger.warn(
|
||||||
colors.yellow(
|
colors.yellow(
|
||||||
'bytecodePlugin does not support ES module, please remove "type": "module" ' +
|
'bytecodePlugin does not support ES module, please remove "type": "module" ' +
|
||||||
'in package.json or set the "build.rollupOptions.output.format" option to "cjs".'
|
'in package.json or set build.rollupOptions.output.format (or build.rolldownOptions.output.format) to "cjs".'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -73,7 +73,7 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
|
|||||||
outDir: path.resolve(root, 'out', 'main'),
|
outDir: path.resolve(root, 'out', 'main'),
|
||||||
target: nodeTarget,
|
target: nodeTarget,
|
||||||
assetsDir: 'chunks',
|
assetsDir: 'chunks',
|
||||||
rollupOptions: {
|
rolldownOptions: {
|
||||||
external: ['electron', /^electron\/.+/, ...builtinModules.flatMap(m => [m, `node:${m}`])],
|
external: ['electron', /^electron\/.+/, ...builtinModules.flatMap(m => [m, `node:${m}`])],
|
||||||
output: {}
|
output: {}
|
||||||
},
|
},
|
||||||
@ -83,10 +83,10 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
|
|||||||
}
|
}
|
||||||
|
|
||||||
const build = config.build || {}
|
const build = config.build || {}
|
||||||
const rollupOptions = build.rollupOptions || {}
|
const rolldownOptions = build.rolldownOptions || {}
|
||||||
if (!rollupOptions.input) {
|
if (!rolldownOptions.input) {
|
||||||
const libOptions = build.lib
|
const libOptions = build.lib
|
||||||
const outputOptions = rollupOptions.output
|
const outputOptions = rolldownOptions.output
|
||||||
defaultConfig.build['lib'] = {
|
defaultConfig.build['lib'] = {
|
||||||
entry: findLibEntry(root, 'main'),
|
entry: findLibEntry(root, 'main'),
|
||||||
formats:
|
formats:
|
||||||
@ -95,10 +95,10 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
|
|||||||
: [outputOptions && !Array.isArray(outputOptions) && outputOptions.format ? outputOptions.format : format]
|
: [outputOptions && !Array.isArray(outputOptions) && outputOptions.format ? outputOptions.format : format]
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
defaultConfig.build.rollupOptions.output['format'] = format
|
defaultConfig.build.rolldownOptions.output['format'] = format
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig.build.rollupOptions.output['assetFileNames'] = path.posix.join(
|
defaultConfig.build.rolldownOptions.output['assetFileNames'] = path.posix.join(
|
||||||
build.assetsDir || defaultConfig.build.assetsDir,
|
build.assetsDir || defaultConfig.build.assetsDir,
|
||||||
'[name]-[hash].[ext]'
|
'[name]-[hash].[ext]'
|
||||||
)
|
)
|
||||||
@ -121,8 +121,9 @@ export function electronMainConfigPresetPlugin(options?: ElectronPluginOptions):
|
|||||||
// enable ssr build
|
// enable ssr build
|
||||||
config.build.ssr = true
|
config.build.ssr = true
|
||||||
config.build.ssrEmitAssets = true
|
config.build.ssrEmitAssets = true
|
||||||
config.build.rolldownOptions = config.build.rollupOptions
|
|
||||||
config.ssr = { ...config.ssr, ...{ noExternal: true } }
|
config.ssr = { ...config.ssr, ...{ noExternal: true } }
|
||||||
|
|
||||||
|
config.build.rollupOptions = config.build.rolldownOptions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,16 +145,17 @@ export function electronMainConfigValidatorPlugin(): Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const libOptions = build.lib
|
const libOptions = build.lib
|
||||||
const rollupOptions = build.rollupOptions
|
const rolldownOptions = build.rolldownOptions
|
||||||
|
|
||||||
if (!(libOptions && libOptions.entry) && !rollupOptions?.input) {
|
if (!(libOptions && libOptions.entry) && !rolldownOptions?.input) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'An entry point is required in the electron vite main config, ' +
|
'An entry point is required in the electron vite main config, ' +
|
||||||
'which can be specified using "build.lib.entry" or "build.rollupOptions.input".'
|
'which can be specified using build.lib.entry, build.rollupOptions.input, ' +
|
||||||
|
'or build.rolldownOptions.input.'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const resolvedOutputs = resolveBuildOutputs(rollupOptions.output, libOptions)
|
const resolvedOutputs = resolveBuildOutputs(rolldownOptions.output, libOptions)
|
||||||
|
|
||||||
if (resolvedOutputs) {
|
if (resolvedOutputs) {
|
||||||
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
||||||
@ -204,7 +206,7 @@ export function electronPreloadConfigPresetPlugin(options?: ElectronPluginOption
|
|||||||
outDir: path.resolve(root, 'out', 'preload'),
|
outDir: path.resolve(root, 'out', 'preload'),
|
||||||
target: nodeTarget,
|
target: nodeTarget,
|
||||||
assetsDir: 'chunks',
|
assetsDir: 'chunks',
|
||||||
rollupOptions: {
|
rolldownOptions: {
|
||||||
external: ['electron', /^electron\/.+/, ...builtinModules.flatMap(m => [m, `node:${m}`])],
|
external: ['electron', /^electron\/.+/, ...builtinModules.flatMap(m => [m, `node:${m}`])],
|
||||||
output: {}
|
output: {}
|
||||||
},
|
},
|
||||||
@ -214,10 +216,10 @@ export function electronPreloadConfigPresetPlugin(options?: ElectronPluginOption
|
|||||||
}
|
}
|
||||||
|
|
||||||
const build = config.build || {}
|
const build = config.build || {}
|
||||||
const rollupOptions = build.rollupOptions || {}
|
const rolldownOptions = build.rolldownOptions || {}
|
||||||
if (!rollupOptions.input) {
|
if (!rolldownOptions.input) {
|
||||||
const libOptions = build.lib
|
const libOptions = build.lib
|
||||||
const outputOptions = rollupOptions.output
|
const outputOptions = rolldownOptions.output
|
||||||
defaultConfig.build['lib'] = {
|
defaultConfig.build['lib'] = {
|
||||||
entry: findLibEntry(root, 'preload'),
|
entry: findLibEntry(root, 'preload'),
|
||||||
formats:
|
formats:
|
||||||
@ -226,10 +228,10 @@ export function electronPreloadConfigPresetPlugin(options?: ElectronPluginOption
|
|||||||
: [outputOptions && !Array.isArray(outputOptions) && outputOptions.format ? outputOptions.format : format]
|
: [outputOptions && !Array.isArray(outputOptions) && outputOptions.format ? outputOptions.format : format]
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
defaultConfig.build.rollupOptions.output['format'] = format
|
defaultConfig.build.rolldownOptions.output['format'] = format
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig.build.rollupOptions.output['assetFileNames'] = path.posix.join(
|
defaultConfig.build.rolldownOptions.output['assetFileNames'] = path.posix.join(
|
||||||
build.assetsDir || defaultConfig.build.assetsDir,
|
build.assetsDir || defaultConfig.build.assetsDir,
|
||||||
'[name]-[hash].[ext]'
|
'[name]-[hash].[ext]'
|
||||||
)
|
)
|
||||||
@ -237,22 +239,22 @@ export function electronPreloadConfigPresetPlugin(options?: ElectronPluginOption
|
|||||||
const buildConfig = mergeConfig(defaultConfig.build, build)
|
const buildConfig = mergeConfig(defaultConfig.build, build)
|
||||||
config.build = buildConfig
|
config.build = buildConfig
|
||||||
|
|
||||||
const resolvedOutputs = resolveBuildOutputs(config.build.rollupOptions!.output, config.build.lib || false)
|
const resolvedOutputs = resolveBuildOutputs(config.build.rolldownOptions!.output, config.build.lib || false)
|
||||||
|
|
||||||
if (resolvedOutputs) {
|
if (resolvedOutputs) {
|
||||||
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
||||||
|
|
||||||
if (outputs.find(({ format }) => format === 'es')) {
|
if (outputs.find(({ format }) => format === 'es')) {
|
||||||
if (Array.isArray(config.build.rollupOptions!.output)) {
|
if (Array.isArray(config.build.rolldownOptions!.output)) {
|
||||||
config.build.rollupOptions!.output.forEach(output => {
|
config.build.rolldownOptions!.output.forEach(output => {
|
||||||
if (output.format === 'es') {
|
if (output.format === 'es') {
|
||||||
output['entryFileNames'] = '[name].mjs'
|
output['entryFileNames'] = '[name].mjs'
|
||||||
output['chunkFileNames'] = '[name]-[hash].mjs'
|
output['chunkFileNames'] = '[name]-[hash].mjs'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
config.build.rollupOptions!.output!['entryFileNames'] = '[name].mjs'
|
config.build.rolldownOptions!.output!['entryFileNames'] = '[name].mjs'
|
||||||
config.build.rollupOptions!.output!['chunkFileNames'] = '[name]-[hash].mjs'
|
config.build.rolldownOptions!.output!['chunkFileNames'] = '[name]-[hash].mjs'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,9 +272,10 @@ export function electronPreloadConfigPresetPlugin(options?: ElectronPluginOption
|
|||||||
// enable ssr build
|
// enable ssr build
|
||||||
config.build.ssr = true
|
config.build.ssr = true
|
||||||
config.build.ssrEmitAssets = true
|
config.build.ssrEmitAssets = true
|
||||||
config.build.rolldownOptions = config.build.rollupOptions
|
|
||||||
config.ssr = mergeConfig(defaultConfig.ssr, config.ssr || {})
|
config.ssr = mergeConfig(defaultConfig.ssr, config.ssr || {})
|
||||||
config.ssr.noExternal = true
|
config.ssr.noExternal = true
|
||||||
|
|
||||||
|
config.build.rollupOptions = config.build.rolldownOptions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -294,16 +297,17 @@ export function electronPreloadConfigValidatorPlugin(): Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const libOptions = build.lib
|
const libOptions = build.lib
|
||||||
const rollupOptions = build.rollupOptions
|
const rolldownOptions = build.rolldownOptions
|
||||||
|
|
||||||
if (!(libOptions && libOptions.entry) && !rollupOptions?.input) {
|
if (!(libOptions && libOptions.entry) && !rolldownOptions?.input) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'An entry point is required in the electron vite preload config, ' +
|
'An entry point is required in the electron vite preload config, ' +
|
||||||
'which can be specified using "build.lib.entry" or "build.rollupOptions.input".'
|
'which can be specified using build.lib.entry, build.rollupOptions.input, ' +
|
||||||
|
' or build.rolldownOptions.input.'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const resolvedOutputs = resolveBuildOutputs(rollupOptions.output, libOptions)
|
const resolvedOutputs = resolveBuildOutputs(rolldownOptions.output, libOptions)
|
||||||
|
|
||||||
if (resolvedOutputs) {
|
if (resolvedOutputs) {
|
||||||
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
const outputs = Array.isArray(resolvedOutputs) ? resolvedOutputs : [resolvedOutputs]
|
||||||
@ -359,7 +363,7 @@ export function electronRendererConfigPresetPlugin(options?: ElectronPluginOptio
|
|||||||
outDir: path.resolve(root, 'out', 'renderer'),
|
outDir: path.resolve(root, 'out', 'renderer'),
|
||||||
target: chromeTarget,
|
target: chromeTarget,
|
||||||
modulePreload: { polyfill: false },
|
modulePreload: { polyfill: false },
|
||||||
rollupOptions: {
|
rolldownOptions: {
|
||||||
input: findInput(root)
|
input: findInput(root)
|
||||||
},
|
},
|
||||||
reportCompressedSize: false,
|
reportCompressedSize: false,
|
||||||
@ -378,6 +382,8 @@ export function electronRendererConfigPresetPlugin(options?: ElectronPluginOptio
|
|||||||
config.envDir = config.envDir || path.resolve(root)
|
config.envDir = config.envDir || path.resolve(root)
|
||||||
|
|
||||||
config.envPrefix = config.envPrefix || ['RENDERER_VITE_', 'VITE_']
|
config.envPrefix = config.envPrefix || ['RENDERER_VITE_', 'VITE_']
|
||||||
|
|
||||||
|
config.build.rollupOptions = config.build.rolldownOptions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -403,10 +409,12 @@ export function electronRendererConfigValidatorPlugin(): Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const rollupOptions = build.rollupOptions
|
const rolldownOptions = build.rolldownOptions
|
||||||
if (!rollupOptions.input) {
|
if (!rolldownOptions.input) {
|
||||||
config.logger.warn(colors.yellow(`index.html file is not found in ${colors.dim('/src/renderer')} directory.`))
|
config.logger.warn(colors.yellow(`index.html file is not found in ${colors.dim('/src/renderer')} directory.`))
|
||||||
throw new Error('build.rollupOptions.input option is required in the electron vite renderer config.')
|
throw new Error(
|
||||||
|
'build.rollupOptions.input or build.rolldownOptions.input option is required in the electron vite renderer config.'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,13 +33,15 @@ export function externalizeDepsPlugin(options: ExternalOptions = {}): Plugin | n
|
|||||||
config(config): void {
|
config(config): void {
|
||||||
const defaultConfig = {
|
const defaultConfig = {
|
||||||
build: {
|
build: {
|
||||||
rollupOptions: {
|
rolldownOptions: {
|
||||||
external: deps.length > 0 ? [...deps, new RegExp(`^(${deps.join('|')})/.+`)] : []
|
external: deps.length > 0 ? [...deps, new RegExp(`^(${deps.join('|')})/.+`)] : []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const buildConfig = mergeConfig(defaultConfig.build, config.build || {})
|
const buildConfig = mergeConfig(defaultConfig.build, config.build || {})
|
||||||
config.build = buildConfig
|
config.build = buildConfig
|
||||||
|
|
||||||
|
config.build.rollupOptions = config.build.rolldownOptions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -134,7 +134,7 @@ async function bundleEntryFile(
|
|||||||
}) as InlineConfig
|
}) as InlineConfig
|
||||||
|
|
||||||
// rewrite the input instead of merging
|
// rewrite the input instead of merging
|
||||||
viteConfig.build!.rollupOptions!.input = input
|
viteConfig.build!.rolldownOptions!.input = input
|
||||||
|
|
||||||
const bundles = (await viteBuild(viteConfig)) as Rolldown.RolldownOutput
|
const bundles = (await viteBuild(viteConfig)) as Rolldown.RolldownOutput
|
||||||
|
|
||||||
|
|||||||
@ -115,8 +115,8 @@ async function bundleEntryFile(input: string, config: InlineConfig): Promise<Rol
|
|||||||
|
|
||||||
// rewrite the input instead of merging
|
// rewrite the input instead of merging
|
||||||
const buildOptions = viteConfig.build!
|
const buildOptions = viteConfig.build!
|
||||||
buildOptions.rollupOptions = {
|
buildOptions.rolldownOptions = {
|
||||||
...buildOptions.rollupOptions,
|
...buildOptions.rolldownOptions,
|
||||||
input
|
input
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user