Skip to content

Commit ea75454

Browse files
committed
feat: convert optimizeDeps.esbuildOptions to optimizeDeps.rollupOptions
1 parent b022d4b commit ea75454

File tree

3 files changed

+136
-13
lines changed

3 files changed

+136
-13
lines changed

packages/vite/src/node/config.ts

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@ export function resolveDevEnvironmentOptions(
598598
preserverSymlinks: boolean,
599599
environmentName: string | undefined,
600600
consumer: 'client' | 'server' | undefined,
601+
logger: Logger,
601602
// Backward compatibility
602603
skipSsrTransform?: boolean,
603604
): ResolvedDevEnvironmentOptions {
@@ -613,6 +614,7 @@ export function resolveDevEnvironmentOptions(
613614
dev?.optimizeDeps,
614615
preserverSymlinks,
615616
consumer,
617+
logger,
616618
),
617619
createEnvironment:
618620
dev?.createEnvironment ??
@@ -658,6 +660,7 @@ function resolveEnvironmentOptions(
658660
resolve.preserveSymlinks,
659661
environmentName,
660662
consumer,
663+
logger,
661664
skipSsrTransform,
662665
),
663666
build: resolveBuildEnvironmentOptions(
@@ -793,8 +796,120 @@ function resolveDepOptimizationOptions(
793796
optimizeDeps: DepOptimizationOptions | undefined,
794797
preserveSymlinks: boolean,
795798
consumer: 'client' | 'server' | undefined,
799+
logger: Logger,
796800
): DepOptimizationOptions {
797801
optimizeDeps ??= {}
802+
803+
if (optimizeDeps.esbuildOptions) {
804+
logger.warn(
805+
colors.yellow(
806+
`You have set \`optimizeDeps.esbuildOptions\` but this options is now deprecated. ` +
807+
`Vite now uses Rolldown to optimize the dependencies. ` +
808+
`Please use \`optimizeDeps.rollupOptions\` instead.`,
809+
),
810+
)
811+
812+
optimizeDeps.rollupOptions ??= {}
813+
optimizeDeps.rollupOptions.resolve ??= {}
814+
optimizeDeps.rollupOptions.output ??= {}
815+
816+
const setResolveOptions = <
817+
T extends keyof Exclude<RollupOptions['resolve'], undefined>,
818+
>(
819+
key: T,
820+
value: Exclude<RollupOptions['resolve'], undefined>[T],
821+
) => {
822+
if (
823+
value !== undefined &&
824+
optimizeDeps.rollupOptions!.resolve![key] === undefined
825+
) {
826+
optimizeDeps.rollupOptions!.resolve![key] = value
827+
}
828+
}
829+
830+
if (
831+
optimizeDeps.esbuildOptions.minify !== undefined &&
832+
optimizeDeps.rollupOptions.output.minify === undefined
833+
) {
834+
optimizeDeps.rollupOptions.output.minify =
835+
optimizeDeps.esbuildOptions.minify
836+
}
837+
if (
838+
optimizeDeps.esbuildOptions.treeShaking !== undefined &&
839+
optimizeDeps.rollupOptions.treeshake === undefined
840+
) {
841+
optimizeDeps.rollupOptions.treeshake =
842+
optimizeDeps.esbuildOptions.treeShaking
843+
}
844+
if (
845+
optimizeDeps.esbuildOptions.define !== undefined &&
846+
optimizeDeps.rollupOptions.define === undefined
847+
) {
848+
optimizeDeps.rollupOptions.define = optimizeDeps.esbuildOptions.define
849+
}
850+
if (optimizeDeps.esbuildOptions.loader !== undefined) {
851+
const loader = optimizeDeps.esbuildOptions.loader
852+
optimizeDeps.rollupOptions.moduleTypes ??= {}
853+
for (const [key, value] of Object.entries(loader)) {
854+
if (
855+
optimizeDeps.rollupOptions.moduleTypes[key] === undefined &&
856+
value !== 'copy' &&
857+
value !== 'css' &&
858+
value !== 'default' &&
859+
value !== 'file' &&
860+
value !== 'local-css'
861+
) {
862+
optimizeDeps.rollupOptions.moduleTypes[key] = value
863+
}
864+
}
865+
}
866+
setResolveOptions('symlinks', optimizeDeps.esbuildOptions.preserveSymlinks)
867+
setResolveOptions(
868+
'extensions',
869+
optimizeDeps.esbuildOptions.resolveExtensions,
870+
)
871+
setResolveOptions('mainFields', optimizeDeps.esbuildOptions.mainFields)
872+
setResolveOptions('conditionNames', optimizeDeps.esbuildOptions.conditions)
873+
874+
// NOTE: the following options cannot be converted
875+
// - legalComments
876+
// - target, supported (Vite used to transpile down to `ESBUILD_MODULES_TARGET`)
877+
// - ignoreAnnotations
878+
// - jsx, jsxFactory, jsxFragment, jsxImportSource, jsxDev, jsxSideEffects
879+
// - tsconfigRaw, tsconfig
880+
881+
// NOTE: the following options can be converted but probably not worth it
882+
// - sourceRoot
883+
// - sourcesContent (`output.sourcemapExcludeSources` is not supported by rolldown)
884+
// - drop
885+
// - dropLabels
886+
// - mangleProps, reserveProps, mangleQuoted, mangleCache
887+
// - minifyWhitespace, minifyIdentifiers, minifySyntax
888+
// - lineLimit
889+
// - charset
890+
// - pure (`treeshake.manualPureFunctions` is not supported by rolldown)
891+
// - alias (it probably does not work the same with `resolve.alias`)
892+
// - inject
893+
// - banner, footer
894+
// - plugins (not sure if it's possible and need to check if it's worth it before)
895+
// - nodePaths
896+
897+
// NOTE: the following options does not make sense to set / convert it
898+
// - globalName (we only use ESM format)
899+
// - keepNames (probably rolldown does not need it? not sure)
900+
// - color
901+
// - logLimit
902+
// - logOverride
903+
// - splitting
904+
// - outbase
905+
// - packages (this should not be set)
906+
// - allowOverwrite
907+
// - publicPath (`file` loader is not supported by rolldown)
908+
// - entryNames, chunkNames, assetNames (Vite does not support changing these options)
909+
// - stdin
910+
// - absWorkingDir
911+
}
912+
798913
return {
799914
include: optimizeDeps.include ?? [],
800915
exclude: optimizeDeps.exclude ?? [],
@@ -1018,6 +1133,7 @@ export async function resolveConfig(
10181133
// default environment options
10191134
undefined,
10201135
undefined,
1136+
logger,
10211137
)
10221138

10231139
const resolvedBuildOptions = resolveBuildEnvironmentOptions(

packages/vite/src/node/optimizer/index.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import colors from 'picocolors'
77
import type { BuildOptions as EsbuildBuildOptions } from 'esbuild'
88
import { init, parse } from 'es-module-lexer'
99
import glob from 'fast-glob'
10-
import { type RollupOptions, type RollupOutput, rolldown } from 'rolldown'
10+
import {
11+
type RollupOptions,
12+
type RollupOutput,
13+
type OutputOptions as RollupOutputOptions,
14+
rolldown,
15+
} from 'rolldown'
1116
import type { ResolvedConfig } from '../config'
1217
import {
1318
asyncFlatten,
@@ -103,7 +108,15 @@ export interface DepOptimizationConfig {
103108
| 'outExtension'
104109
| 'metafile'
105110
>
106-
rollupOptions?: RollupOptions
111+
rollupOptions?: Omit<
112+
RollupOptions,
113+
'input' | 'logLevel' | 'platform' | 'output'
114+
> & {
115+
output?: Omit<
116+
RollupOutputOptions,
117+
'format' | 'sourcemap' | 'dir' | 'banner'
118+
>
119+
}
107120
/**
108121
* List of file extensions that can be optimized. A corresponding esbuild
109122
* plugin must exist to handle the specific extension.
@@ -770,17 +783,18 @@ async function prepareRolldownOptimizerRun(
770783
let canceled = false
771784
async function build() {
772785
const bundle = await rolldown({
786+
...rollupOptions,
773787
input: flatIdDeps,
774788
logLevel: 'warn',
775789
plugins,
790+
platform,
776791
resolve: {
777792
// TODO: set aliasFields, conditionNames depending on `platform`
778793
mainFields: ['module', 'main'],
779794
aliasFields: [['browser']],
780795
extensions: ['.js', '.css'],
781796
conditionNames: ['browser'],
782797
},
783-
...rollupOptions,
784798
// TODO: remove this and enable rolldown's CSS support later
785799
moduleTypes: {
786800
'.css': 'js',
@@ -792,14 +806,14 @@ async function prepareRolldownOptimizerRun(
792806
throw new Error('The build was canceled')
793807
}
794808
const result = await bundle.write({
809+
...rollupOptions.output,
795810
format: 'esm',
796811
sourcemap: true,
797812
dir: processingCacheDir,
798813
banner:
799814
platform === 'node'
800815
? `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
801816
: undefined,
802-
...rollupOptions.output,
803817
})
804818
await bundle.close()
805819
return result
@@ -1076,6 +1090,7 @@ export async function extractExportsData(
10761090
const result = await build.generate({
10771091
...rollupOptions.output,
10781092
format: 'esm',
1093+
sourcemap: false,
10791094
})
10801095
const [, exports, , hasModuleSyntax] = parse(result.output[0].code)
10811096
return {

packages/vite/src/node/optimizer/scan.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -253,14 +253,6 @@ async function prepareRolldownScanner(
253253
): Promise<{ build: () => Promise<void> } | undefined> {
254254
if (scanContext?.cancelled) return
255255

256-
if (environment.config.dev.optimizeDeps.esbuildOptions) {
257-
environment.logger.error(
258-
`You've set "optimizeDeps.esbuildOptions" in your config. ` +
259-
`This is deprecated and vite already use rollup to optimize packages. ` +
260-
`Please use "optimizeDeps.rollupOptions" instead.`,
261-
)
262-
}
263-
264256
const { plugins: pluginsFromConfig = [], ...rollupOptions } =
265257
environment.config.dev.optimizeDeps.rollupOptions ?? {}
266258

@@ -270,10 +262,10 @@ async function prepareRolldownScanner(
270262

271263
async function build() {
272264
await scan({
265+
...rollupOptions,
273266
input: entries,
274267
logLevel: 'silent',
275268
plugins,
276-
...rollupOptions,
277269
})
278270
}
279271

0 commit comments

Comments
 (0)