Skip to content

Commit e66d358

Browse files
committed
feat: convert optimizeDep.esbuildOptions to optimizeDep.rollupOptions automatically
1 parent 48c6010 commit e66d358

File tree

2 files changed

+437
-0
lines changed

2 files changed

+437
-0
lines changed

packages/vite/src/node/config.ts

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type { Alias, AliasOptions } from 'dep-types/alias'
1111
import type { RollupOptions } from 'rollup'
1212
import picomatch from 'picomatch'
1313
import { build } from 'esbuild'
14+
import type { RolldownOptions } from 'rolldown'
1415
import type { AnymatchFn } from '../types/anymatch'
1516
import { withTrailingSlash } from '../shared/utils'
1617
import {
@@ -103,6 +104,7 @@ import { PartialEnvironment } from './baseEnvironment'
103104
import { createIdResolver } from './idResolver'
104105
import { runnerImport } from './ssr/runnerImport'
105106
import { getAdditionalAllowedHosts } from './server/middlewares/hostCheck'
107+
import { convertEsbuildPluginToRolldownPlugin } from './optimizer/pluginConverter'
106108

107109
const debug = createDebugger('vite:config', { depth: 10 })
108110
const 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+
10371181
export 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

Comments
 (0)