Skip to content

Commit 80dc4d6

Browse files
authored
refactor: introduce *.rolldownOptions and deprecate *.rollupOptions (#348)
1 parent 793cf71 commit 80dc4d6

File tree

5 files changed

+347
-9
lines changed

5 files changed

+347
-9
lines changed

packages/vite/src/node/__tests__/config.spec.ts

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,253 @@ describe('mergeConfig', () => {
273273
),
274274
).toThrowError('Cannot merge config in form of callback')
275275
})
276+
277+
test('handles `rollupOptions`', () => {
278+
const baseConfig = defineConfig({
279+
build: {
280+
rollupOptions: {
281+
treeshake: false,
282+
},
283+
},
284+
worker: {
285+
rollupOptions: {
286+
treeshake: false,
287+
},
288+
},
289+
optimizeDeps: {
290+
rollupOptions: {
291+
treeshake: false,
292+
},
293+
},
294+
ssr: {
295+
optimizeDeps: {
296+
rollupOptions: {
297+
treeshake: false,
298+
},
299+
},
300+
},
301+
})
302+
303+
const newConfig = defineConfig({
304+
build: {
305+
rollupOptions: {
306+
output: {
307+
minifyInternalExports: true,
308+
},
309+
},
310+
},
311+
worker: {
312+
rollupOptions: {
313+
output: {
314+
minifyInternalExports: true,
315+
},
316+
},
317+
},
318+
optimizeDeps: {
319+
rollupOptions: {
320+
output: {
321+
minifyInternalExports: true,
322+
},
323+
},
324+
},
325+
ssr: {
326+
optimizeDeps: {
327+
rollupOptions: {
328+
output: {
329+
minifyInternalExports: true,
330+
},
331+
},
332+
},
333+
},
334+
})
335+
336+
const mergedConfig = mergeConfig(baseConfig, newConfig)
337+
338+
const expected = {
339+
treeshake: false,
340+
output: {
341+
minifyInternalExports: true,
342+
},
343+
}
344+
expect(mergedConfig.build.rollupOptions).toStrictEqual(expected)
345+
expect(mergedConfig.build.rolldownOptions).toStrictEqual(expected)
346+
expect(mergedConfig.worker.rollupOptions).toStrictEqual(expected)
347+
expect(mergedConfig.worker.rolldownOptions).toStrictEqual(expected)
348+
expect(mergedConfig.optimizeDeps.rollupOptions).toStrictEqual(expected)
349+
expect(mergedConfig.optimizeDeps.rolldownOptions).toStrictEqual(expected)
350+
expect(mergedConfig.ssr.optimizeDeps.rollupOptions).toStrictEqual(expected)
351+
expect(mergedConfig.ssr.optimizeDeps.rolldownOptions).toStrictEqual(
352+
expected,
353+
)
354+
})
355+
356+
test('handles `build.rolldownOptions`', () => {
357+
const baseConfig = defineConfig({
358+
build: {
359+
rolldownOptions: {
360+
treeshake: false,
361+
},
362+
},
363+
worker: {
364+
rolldownOptions: {
365+
treeshake: false,
366+
},
367+
},
368+
optimizeDeps: {
369+
rolldownOptions: {
370+
treeshake: false,
371+
},
372+
},
373+
ssr: {
374+
optimizeDeps: {
375+
rolldownOptions: {
376+
treeshake: false,
377+
},
378+
},
379+
},
380+
})
381+
382+
const newConfig = defineConfig({
383+
build: {
384+
rolldownOptions: {
385+
output: {
386+
minifyInternalExports: true,
387+
},
388+
},
389+
},
390+
worker: {
391+
rolldownOptions: {
392+
output: {
393+
minifyInternalExports: true,
394+
},
395+
},
396+
},
397+
optimizeDeps: {
398+
rolldownOptions: {
399+
output: {
400+
minifyInternalExports: true,
401+
},
402+
},
403+
},
404+
ssr: {
405+
optimizeDeps: {
406+
rolldownOptions: {
407+
output: {
408+
minifyInternalExports: true,
409+
},
410+
},
411+
},
412+
},
413+
})
414+
415+
const mergedConfig = mergeConfig(baseConfig, newConfig)
416+
417+
const expected = {
418+
treeshake: false,
419+
output: {
420+
minifyInternalExports: true,
421+
},
422+
}
423+
expect(mergedConfig.build.rollupOptions).toStrictEqual(expected)
424+
expect(mergedConfig.build.rolldownOptions).toStrictEqual(expected)
425+
expect(mergedConfig.worker.rollupOptions).toStrictEqual(expected)
426+
expect(mergedConfig.worker.rolldownOptions).toStrictEqual(expected)
427+
expect(mergedConfig.optimizeDeps.rollupOptions).toStrictEqual(expected)
428+
expect(mergedConfig.optimizeDeps.rolldownOptions).toStrictEqual(expected)
429+
expect(mergedConfig.ssr.optimizeDeps.rollupOptions).toStrictEqual(expected)
430+
expect(mergedConfig.ssr.optimizeDeps.rolldownOptions).toStrictEqual(
431+
expected,
432+
)
433+
})
434+
435+
test('syncs `build.rollupOptions` and `build.rolldownOptions`', () => {
436+
const baseConfig = defineConfig({
437+
build: {
438+
rollupOptions: {
439+
treeshake: false,
440+
},
441+
},
442+
worker: {
443+
rollupOptions: {
444+
treeshake: false,
445+
},
446+
},
447+
optimizeDeps: {
448+
rollupOptions: {
449+
treeshake: false,
450+
},
451+
},
452+
ssr: {
453+
optimizeDeps: {
454+
rollupOptions: {
455+
treeshake: false,
456+
},
457+
},
458+
},
459+
})
460+
461+
const newConfig = defineConfig({
462+
build: {
463+
rolldownOptions: {
464+
output: {
465+
minifyInternalExports: true,
466+
},
467+
},
468+
},
469+
worker: {
470+
rolldownOptions: {
471+
output: {
472+
minifyInternalExports: true,
473+
},
474+
},
475+
},
476+
optimizeDeps: {
477+
rolldownOptions: {
478+
output: {
479+
minifyInternalExports: true,
480+
},
481+
},
482+
},
483+
ssr: {
484+
optimizeDeps: {
485+
rollupOptions: {
486+
output: {
487+
minifyInternalExports: true,
488+
},
489+
},
490+
},
491+
},
492+
})
493+
494+
const mergedConfig = mergeConfig(baseConfig, newConfig) as UserConfig
495+
496+
const expected = {
497+
treeshake: false,
498+
output: {
499+
minifyInternalExports: true,
500+
},
501+
}
502+
expect(mergedConfig.build!.rollupOptions).toStrictEqual(expected)
503+
expect(mergedConfig.build!.rolldownOptions).toStrictEqual(expected)
504+
expect(mergedConfig.worker!.rollupOptions).toStrictEqual(expected)
505+
expect(mergedConfig.worker!.rolldownOptions).toStrictEqual(expected)
506+
expect(mergedConfig.optimizeDeps!.rollupOptions).toStrictEqual(expected)
507+
expect(mergedConfig.optimizeDeps!.rolldownOptions).toStrictEqual(expected)
508+
expect(mergedConfig.ssr!.optimizeDeps!.rollupOptions).toStrictEqual(
509+
expected,
510+
)
511+
expect(mergedConfig.ssr!.optimizeDeps!.rolldownOptions).toStrictEqual(
512+
expected,
513+
)
514+
515+
const upOutput = mergedConfig.build!.rollupOptions!.output!
516+
if (Array.isArray(upOutput)) throw new Error()
517+
const downOutput = mergedConfig.build!.rolldownOptions!.output!
518+
if (Array.isArray(downOutput)) throw new Error()
519+
upOutput.hashCharacters = 'base36'
520+
expect(upOutput.hashCharacters).toBe('base36')
521+
expect(downOutput.hashCharacters).toBe('base36')
522+
})
276523
})
277524

278525
describe('resolveEnvPrefix', () => {

packages/vite/src/node/build.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import {
5454
mergeConfig,
5555
mergeWithDefaults,
5656
partialEncodeURIPath,
57+
setupRollupOptionCompat,
5758
unique,
5859
} from './utils'
5960
import { perEnvironmentPlugin } from './plugin'
@@ -187,10 +188,15 @@ export interface BuildEnvironmentOptions {
187188
*/
188189
terserOptions?: TerserOptions
189190
/**
190-
* Will be merged with internal rollup options.
191-
* https://rollupjs.org/configuration-options/
191+
* Alias to `rolldownOptions`
192+
* @deprecated Use `rolldownOptions` instead.
192193
*/
193194
rollupOptions?: RolldownOptions
195+
/**
196+
* Will be merged with internal rolldown options.
197+
* https://rolldown.rs/reference/config-options
198+
*/
199+
rolldownOptions?: RolldownOptions
194200
/**
195201
* Options to pass on to `@rollup/plugin-commonjs`
196202
*/
@@ -373,7 +379,7 @@ export const buildEnvironmentOptionsDefaults = Object.freeze({
373379
sourcemap: false,
374380
// minify
375381
terserOptions: {},
376-
rollupOptions: {},
382+
rolldownOptions: {},
377383
commonjsOptions: {
378384
include: [/node_modules/],
379385
extensions: ['.js', '.cjs'],
@@ -422,15 +428,19 @@ export function resolveBuildEnvironmentOptions(
422428
...buildEnvironmentOptionsDefaults,
423429
cssCodeSplit: !raw.lib,
424430
minify: consumer === 'server' ? false : 'oxc',
425-
rollupOptions: {
426-
platform: consumer === 'server' ? 'node' : 'browser',
427-
},
431+
rollupOptions: {},
432+
rolldownOptions: undefined,
428433
ssr: consumer === 'server',
429434
emitAssets: consumer === 'client',
430435
createEnvironment: (name, config) => new BuildEnvironment(name, config),
431436
} satisfies BuildEnvironmentOptions,
432437
raw,
433438
)
439+
setupRollupOptionCompat(merged)
440+
merged.rolldownOptions = {
441+
...merged.rolldownOptions,
442+
platform: consumer === 'server' ? 'node' : 'browser',
443+
}
434444

435445
// handle special build targets
436446
if (merged.target === 'baseline-widely-available') {

packages/vite/src/node/config.ts

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ import {
8484
nodeLikeBuiltins,
8585
normalizeAlias,
8686
normalizePath,
87+
setupRollupOptionCompat,
8788
} from './utils'
8889
import {
8990
createPluginHookUtils,
@@ -454,12 +455,20 @@ export interface UserConfig extends DefaultEnvironmentOptions {
454455
*/
455456
plugins?: () => PluginOption[]
456457
/**
457-
* Rollup options to build worker bundle
458+
* Alias to `rolldownOptions`.
459+
* @deprecated Use `rolldownOptions` instead.
458460
*/
459461
rollupOptions?: Omit<
460462
RolldownOptions,
461463
'plugins' | 'input' | 'onwarn' | 'preserveEntrySignatures'
462464
>
465+
/**
466+
* Rolldown options to build worker bundle
467+
*/
468+
rolldownOptions?: Omit<
469+
RolldownOptions,
470+
'plugins' | 'input' | 'onwarn' | 'preserveEntrySignatures'
471+
>
463472
}
464473
/**
465474
* Dep optimization options
@@ -555,7 +564,11 @@ export interface LegacyOptions {
555564
export interface ResolvedWorkerOptions {
556565
format: 'es' | 'iife'
557566
plugins: (bundleChain: string[]) => Promise<ResolvedConfig>
567+
/**
568+
* @deprecated Use `rolldownOptions` instead.
569+
*/
558570
rollupOptions: RolldownOptions
571+
rolldownOptions: RolldownOptions
559572
}
560573

561574
export interface InlineConfig extends UserConfig {
@@ -1261,6 +1274,16 @@ export async function resolveConfig(
12611274
patchPlugins: ((resolvedPlugins: Plugin[]) => void) | undefined = undefined,
12621275
): Promise<ResolvedConfig> {
12631276
let config = inlineConfig
1277+
config.build ??= {}
1278+
setupRollupOptionCompat(config.build)
1279+
config.worker ??= {}
1280+
setupRollupOptionCompat(config.worker)
1281+
config.optimizeDeps ??= {}
1282+
setupRollupOptionCompat(config.optimizeDeps)
1283+
config.ssr ??= {}
1284+
config.ssr.optimizeDeps ??= {}
1285+
setupRollupOptionCompat(config.ssr.optimizeDeps)
1286+
12641287
let configFileDependencies: string[] = []
12651288
let mode = inlineConfig.mode || defaultMode
12661289
const isNodeEnvSet = !!process.env.NODE_ENV
@@ -1674,11 +1697,18 @@ export async function resolveConfig(
16741697
return workerResolved
16751698
}
16761699

1677-
const resolvedWorkerOptions: ResolvedWorkerOptions = {
1700+
const resolvedWorkerOptions: Omit<
1701+
ResolvedWorkerOptions,
1702+
'rolldownOptions'
1703+
> & {
1704+
rolldownOptions: ResolvedWorkerOptions['rolldownOptions'] | undefined
1705+
} = {
16781706
format: config.worker?.format || 'iife',
16791707
plugins: createWorkerPlugins,
16801708
rollupOptions: config.worker?.rollupOptions || {},
1709+
rolldownOptions: config.worker?.rolldownOptions, // will be set by setupRollupOptionCompat if undefined
16811710
}
1711+
setupRollupOptionCompat(resolvedWorkerOptions)
16821712

16831713
const base = withTrailingSlash(resolvedBase)
16841714

0 commit comments

Comments
 (0)