@@ -11,6 +11,7 @@ import type { Alias, AliasOptions } from 'dep-types/alias'
11
11
import type { RollupOptions } from 'rollup'
12
12
import picomatch from 'picomatch'
13
13
import { build } from 'esbuild'
14
+ import type { RolldownOptions } from 'rolldown'
14
15
import type { AnymatchFn } from '../types/anymatch'
15
16
import { withTrailingSlash } from '../shared/utils'
16
17
import {
@@ -103,6 +104,7 @@ import { PartialEnvironment } from './baseEnvironment'
103
104
import { createIdResolver } from './idResolver'
104
105
import { runnerImport } from './ssr/runnerImport'
105
106
import { getAdditionalAllowedHosts } from './server/middlewares/hostCheck'
107
+ import { convertEsbuildPluginToRolldownPlugin } from './optimizer/pluginConverter'
106
108
107
109
const debug = createDebugger ( 'vite:config' , { depth : 10 } )
108
110
const promisifiedRealpath = promisify ( fs . realpath )
@@ -811,6 +813,7 @@ function resolveEnvironmentOptions(
811
813
resolve . preserveSymlinks ,
812
814
forceOptimizeDeps ,
813
815
consumer ,
816
+ logger ,
814
817
) ,
815
818
dev : resolveDevEnvironmentOptions (
816
819
options . dev ,
@@ -991,7 +994,133 @@ function resolveDepOptimizationOptions(
991
994
preserveSymlinks : boolean ,
992
995
forceOptimizeDeps : boolean | undefined ,
993
996
consumer : 'client' | 'server' | undefined ,
997
+ logger : Logger ,
994
998
) : DepOptimizationOptions {
999
+ if (
1000
+ optimizeDeps ?. esbuildOptions &&
1001
+ Object . keys ( optimizeDeps . esbuildOptions ) . length > 0
1002
+ ) {
1003
+ logger . warn (
1004
+ colors . yellow (
1005
+ `You have set \`optimizeDeps.esbuildOptions\` but this options is now deprecated. ` +
1006
+ `Vite now uses Rolldown to optimize the dependencies. ` +
1007
+ `Please use \`optimizeDeps.rollupOptions\` instead.` ,
1008
+ ) ,
1009
+ )
1010
+
1011
+ optimizeDeps . rollupOptions ??= { }
1012
+ optimizeDeps . rollupOptions . resolve ??= { }
1013
+ optimizeDeps . rollupOptions . output ??= { }
1014
+
1015
+ const setResolveOptions = <
1016
+ T extends keyof Exclude < RolldownOptions [ 'resolve' ] , undefined > ,
1017
+ > (
1018
+ key : T ,
1019
+ value : Exclude < RolldownOptions [ 'resolve' ] , undefined > [ T ] ,
1020
+ ) => {
1021
+ if (
1022
+ value !== undefined &&
1023
+ optimizeDeps . rollupOptions ! . resolve ! [ key ] === undefined
1024
+ ) {
1025
+ optimizeDeps . rollupOptions ! . resolve ! [ key ] = value
1026
+ }
1027
+ }
1028
+
1029
+ if (
1030
+ optimizeDeps . esbuildOptions . minify !== undefined &&
1031
+ optimizeDeps . rollupOptions . output . minify === undefined
1032
+ ) {
1033
+ optimizeDeps . rollupOptions . output . minify =
1034
+ optimizeDeps . esbuildOptions . minify
1035
+ }
1036
+ if (
1037
+ optimizeDeps . esbuildOptions . treeShaking !== undefined &&
1038
+ optimizeDeps . rollupOptions . treeshake === undefined
1039
+ ) {
1040
+ optimizeDeps . rollupOptions . treeshake =
1041
+ optimizeDeps . esbuildOptions . treeShaking
1042
+ }
1043
+ if (
1044
+ optimizeDeps . esbuildOptions . define !== undefined &&
1045
+ optimizeDeps . rollupOptions . define === undefined
1046
+ ) {
1047
+ optimizeDeps . rollupOptions . define = optimizeDeps . esbuildOptions . define
1048
+ }
1049
+ if ( optimizeDeps . esbuildOptions . loader !== undefined ) {
1050
+ const loader = optimizeDeps . esbuildOptions . loader
1051
+ optimizeDeps . rollupOptions . moduleTypes ??= { }
1052
+ for ( const [ key , value ] of Object . entries ( loader ) ) {
1053
+ if (
1054
+ optimizeDeps . rollupOptions . moduleTypes [ key ] === undefined &&
1055
+ value !== 'copy' &&
1056
+ value !== 'css' &&
1057
+ value !== 'default' &&
1058
+ value !== 'file' &&
1059
+ value !== 'local-css'
1060
+ ) {
1061
+ optimizeDeps . rollupOptions . moduleTypes [ key ] = value
1062
+ }
1063
+ }
1064
+ }
1065
+ setResolveOptions ( 'symlinks' , optimizeDeps . esbuildOptions . preserveSymlinks )
1066
+ setResolveOptions (
1067
+ 'extensions' ,
1068
+ optimizeDeps . esbuildOptions . resolveExtensions ,
1069
+ )
1070
+ setResolveOptions ( 'mainFields' , optimizeDeps . esbuildOptions . mainFields )
1071
+ setResolveOptions ( 'conditionNames' , optimizeDeps . esbuildOptions . conditions )
1072
+ if (
1073
+ optimizeDeps . esbuildOptions . keepNames !== undefined &&
1074
+ optimizeDeps . rollupOptions . keepNames === undefined
1075
+ ) {
1076
+ optimizeDeps . rollupOptions . keepNames =
1077
+ optimizeDeps . esbuildOptions . keepNames
1078
+ }
1079
+
1080
+ if (
1081
+ optimizeDeps . esbuildOptions . platform !== undefined &&
1082
+ optimizeDeps . rollupOptions . platform === undefined
1083
+ ) {
1084
+ optimizeDeps . rollupOptions . platform = optimizeDeps . esbuildOptions . platform
1085
+ }
1086
+
1087
+ // NOTE: the following options cannot be converted
1088
+ // - legalComments
1089
+ // - target, supported (Vite used to transpile down to `ESBUILD_MODULES_TARGET`)
1090
+ // - ignoreAnnotations
1091
+ // - jsx, jsxFactory, jsxFragment, jsxImportSource, jsxDev, jsxSideEffects
1092
+ // - tsconfigRaw, tsconfig
1093
+
1094
+ // NOTE: the following options can be converted but probably not worth it
1095
+ // - sourceRoot
1096
+ // - sourcesContent (`output.sourcemapExcludeSources` is not supported by rolldown)
1097
+ // - drop
1098
+ // - dropLabels
1099
+ // - mangleProps, reserveProps, mangleQuoted, mangleCache
1100
+ // - minifyWhitespace, minifyIdentifiers, minifySyntax
1101
+ // - lineLimit
1102
+ // - charset
1103
+ // - pure (`treeshake.manualPureFunctions` is not supported by rolldown)
1104
+ // - alias (it probably does not work the same with `resolve.alias`)
1105
+ // - inject
1106
+ // - banner, footer
1107
+ // - nodePaths
1108
+
1109
+ // NOTE: the following options does not make sense to set / convert it
1110
+ // - globalName (we only use ESM format)
1111
+ // - color
1112
+ // - logLimit
1113
+ // - logOverride
1114
+ // - splitting
1115
+ // - outbase
1116
+ // - packages (this should not be set)
1117
+ // - allowOverwrite
1118
+ // - publicPath (`file` loader is not supported by rolldown)
1119
+ // - entryNames, chunkNames, assetNames (Vite does not support changing these options)
1120
+ // - stdin
1121
+ // - absWorkingDir
1122
+ }
1123
+
995
1124
return mergeWithDefaults (
996
1125
{
997
1126
...configDefaults . optimizeDeps ,
@@ -1006,6 +1135,21 @@ function resolveDepOptimizationOptions(
1006
1135
)
1007
1136
}
1008
1137
1138
+ function applyDepOptimizationOptionCompat ( resolvedConfig : ResolvedConfig ) {
1139
+ if (
1140
+ resolvedConfig . optimizeDeps . esbuildOptions ?. plugins &&
1141
+ resolvedConfig . optimizeDeps . esbuildOptions . plugins . length > 0
1142
+ ) {
1143
+ resolvedConfig . optimizeDeps . rollupOptions ??= { }
1144
+ resolvedConfig . optimizeDeps . rollupOptions . plugins ||= [ ]
1145
+ ; ( resolvedConfig . optimizeDeps . rollupOptions . plugins as any [ ] ) . push (
1146
+ ...resolvedConfig . optimizeDeps . esbuildOptions . plugins . map ( ( plugin ) =>
1147
+ convertEsbuildPluginToRolldownPlugin ( plugin ) ,
1148
+ ) ,
1149
+ )
1150
+ }
1151
+ }
1152
+
1009
1153
export async function resolveConfig (
1010
1154
inlineConfig : InlineConfig ,
1011
1155
command : 'build' | 'serve' ,
@@ -1569,6 +1713,8 @@ export async function resolveConfig(
1569
1713
resolved . build . ssrEmitAssets || resolved . build . emitAssets
1570
1714
}
1571
1715
1716
+ applyDepOptimizationOptionCompat ( resolved )
1717
+
1572
1718
debug ?.( `using resolved config: %O` , {
1573
1719
...resolved ,
1574
1720
plugins : resolved . plugins . map ( ( p ) => p . name ) ,
0 commit comments