@@ -11,6 +11,7 @@ import type { Alias, AliasOptions } from 'dep-types/alias'
1111import type { RollupOptions } from 'rollup'
1212import picomatch from 'picomatch'
1313import { build } from 'esbuild'
14+ import type { RolldownOptions } from 'rolldown'
1415import type { AnymatchFn } from '../types/anymatch'
1516import { withTrailingSlash } from '../shared/utils'
1617import {
@@ -103,6 +104,7 @@ import { PartialEnvironment } from './baseEnvironment'
103104import { createIdResolver } from './idResolver'
104105import { runnerImport } from './ssr/runnerImport'
105106import { getAdditionalAllowedHosts } from './server/middlewares/hostCheck'
107+ import { convertEsbuildPluginToRolldownPlugin } from './optimizer/pluginConverter'
106108
107109const debug = createDebugger ( 'vite:config' , { depth : 10 } )
108110const promisifiedRealpath = promisify ( fs . realpath )
@@ -832,6 +834,7 @@ function resolveEnvironmentOptions(
832834 resolve . preserveSymlinks ,
833835 forceOptimizeDeps ,
834836 consumer ,
837+ logger ,
835838 ) ,
836839 dev : resolveDevEnvironmentOptions (
837840 options . dev ,
@@ -1019,7 +1022,133 @@ function resolveDepOptimizationOptions(
10191022 preserveSymlinks : boolean ,
10201023 forceOptimizeDeps : boolean | undefined ,
10211024 consumer : 'client' | 'server' | undefined ,
1025+ logger : Logger ,
10221026) : DepOptimizationOptions {
1027+ if (
1028+ optimizeDeps ?. esbuildOptions &&
1029+ Object . keys ( optimizeDeps . esbuildOptions ) . length > 0
1030+ ) {
1031+ logger . warn (
1032+ colors . yellow (
1033+ `You have set \`optimizeDeps.esbuildOptions\` but this options is now deprecated. ` +
1034+ `Vite now uses Rolldown to optimize the dependencies. ` +
1035+ `Please use \`optimizeDeps.rollupOptions\` instead.` ,
1036+ ) ,
1037+ )
1038+
1039+ optimizeDeps . rollupOptions ??= { }
1040+ optimizeDeps . rollupOptions . resolve ??= { }
1041+ optimizeDeps . rollupOptions . output ??= { }
1042+
1043+ const setResolveOptions = <
1044+ T extends keyof Exclude < RolldownOptions [ 'resolve' ] , undefined > ,
1045+ > (
1046+ key : T ,
1047+ value : Exclude < RolldownOptions [ 'resolve' ] , undefined > [ T ] ,
1048+ ) => {
1049+ if (
1050+ value !== undefined &&
1051+ optimizeDeps . rollupOptions ! . resolve ! [ key ] === undefined
1052+ ) {
1053+ optimizeDeps . rollupOptions ! . resolve ! [ key ] = value
1054+ }
1055+ }
1056+
1057+ if (
1058+ optimizeDeps . esbuildOptions . minify !== undefined &&
1059+ optimizeDeps . rollupOptions . output . minify === undefined
1060+ ) {
1061+ optimizeDeps . rollupOptions . output . minify =
1062+ optimizeDeps . esbuildOptions . minify
1063+ }
1064+ if (
1065+ optimizeDeps . esbuildOptions . treeShaking !== undefined &&
1066+ optimizeDeps . rollupOptions . treeshake === undefined
1067+ ) {
1068+ optimizeDeps . rollupOptions . treeshake =
1069+ optimizeDeps . esbuildOptions . treeShaking
1070+ }
1071+ if (
1072+ optimizeDeps . esbuildOptions . define !== undefined &&
1073+ optimizeDeps . rollupOptions . define === undefined
1074+ ) {
1075+ optimizeDeps . rollupOptions . define = optimizeDeps . esbuildOptions . define
1076+ }
1077+ if ( optimizeDeps . esbuildOptions . loader !== undefined ) {
1078+ const loader = optimizeDeps . esbuildOptions . loader
1079+ optimizeDeps . rollupOptions . moduleTypes ??= { }
1080+ for ( const [ key , value ] of Object . entries ( loader ) ) {
1081+ if (
1082+ optimizeDeps . rollupOptions . moduleTypes [ key ] === undefined &&
1083+ value !== 'copy' &&
1084+ value !== 'css' &&
1085+ value !== 'default' &&
1086+ value !== 'file' &&
1087+ value !== 'local-css'
1088+ ) {
1089+ optimizeDeps . rollupOptions . moduleTypes [ key ] = value
1090+ }
1091+ }
1092+ }
1093+ setResolveOptions ( 'symlinks' , optimizeDeps . esbuildOptions . preserveSymlinks )
1094+ setResolveOptions (
1095+ 'extensions' ,
1096+ optimizeDeps . esbuildOptions . resolveExtensions ,
1097+ )
1098+ setResolveOptions ( 'mainFields' , optimizeDeps . esbuildOptions . mainFields )
1099+ setResolveOptions ( 'conditionNames' , optimizeDeps . esbuildOptions . conditions )
1100+ if (
1101+ optimizeDeps . esbuildOptions . keepNames !== undefined &&
1102+ optimizeDeps . rollupOptions . keepNames === undefined
1103+ ) {
1104+ optimizeDeps . rollupOptions . keepNames =
1105+ optimizeDeps . esbuildOptions . keepNames
1106+ }
1107+
1108+ if (
1109+ optimizeDeps . esbuildOptions . platform !== undefined &&
1110+ optimizeDeps . rollupOptions . platform === undefined
1111+ ) {
1112+ optimizeDeps . rollupOptions . platform = optimizeDeps . esbuildOptions . platform
1113+ }
1114+
1115+ // NOTE: the following options cannot be converted
1116+ // - legalComments
1117+ // - target, supported (Vite used to transpile down to `ESBUILD_MODULES_TARGET`)
1118+ // - ignoreAnnotations
1119+ // - jsx, jsxFactory, jsxFragment, jsxImportSource, jsxDev, jsxSideEffects
1120+ // - tsconfigRaw, tsconfig
1121+
1122+ // NOTE: the following options can be converted but probably not worth it
1123+ // - sourceRoot
1124+ // - sourcesContent (`output.sourcemapExcludeSources` is not supported by rolldown)
1125+ // - drop
1126+ // - dropLabels
1127+ // - mangleProps, reserveProps, mangleQuoted, mangleCache
1128+ // - minifyWhitespace, minifyIdentifiers, minifySyntax
1129+ // - lineLimit
1130+ // - charset
1131+ // - pure (`treeshake.manualPureFunctions` is not supported by rolldown)
1132+ // - alias (it probably does not work the same with `resolve.alias`)
1133+ // - inject
1134+ // - banner, footer
1135+ // - nodePaths
1136+
1137+ // NOTE: the following options does not make sense to set / convert it
1138+ // - globalName (we only use ESM format)
1139+ // - color
1140+ // - logLimit
1141+ // - logOverride
1142+ // - splitting
1143+ // - outbase
1144+ // - packages (this should not be set)
1145+ // - allowOverwrite
1146+ // - publicPath (`file` loader is not supported by rolldown)
1147+ // - entryNames, chunkNames, assetNames (Vite does not support changing these options)
1148+ // - stdin
1149+ // - absWorkingDir
1150+ }
1151+
10231152 return mergeWithDefaults (
10241153 {
10251154 ...configDefaults . optimizeDeps ,
@@ -1034,6 +1163,21 @@ function resolveDepOptimizationOptions(
10341163 )
10351164}
10361165
1166+ function applyDepOptimizationOptionCompat ( resolvedConfig : ResolvedConfig ) {
1167+ if (
1168+ resolvedConfig . optimizeDeps . esbuildOptions ?. plugins &&
1169+ resolvedConfig . optimizeDeps . esbuildOptions . plugins . length > 0
1170+ ) {
1171+ resolvedConfig . optimizeDeps . rollupOptions ??= { }
1172+ resolvedConfig . optimizeDeps . rollupOptions . plugins ||= [ ]
1173+ ; ( resolvedConfig . optimizeDeps . rollupOptions . plugins as any [ ] ) . push (
1174+ ...resolvedConfig . optimizeDeps . esbuildOptions . plugins . map ( ( plugin ) =>
1175+ convertEsbuildPluginToRolldownPlugin ( plugin ) ,
1176+ ) ,
1177+ )
1178+ }
1179+ }
1180+
10371181export async function resolveConfig (
10381182 inlineConfig : InlineConfig ,
10391183 command : 'build' | 'serve' ,
@@ -1597,6 +1741,8 @@ export async function resolveConfig(
15971741 resolved . build . ssrEmitAssets || resolved . build . emitAssets
15981742 }
15991743
1744+ applyDepOptimizationOptionCompat ( resolved )
1745+
16001746 debug ?.( `using resolved config: %O` , {
16011747 ...resolved ,
16021748 plugins : resolved . plugins . map ( ( p ) => p . name ) ,
0 commit comments