Skip to content

Commit ee0b21a

Browse files
committed
feat: convert optimizeDep.esbuildOptions to optimizeDep.rollupOptions automatically
1 parent 5a160a5 commit ee0b21a

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)
@@ -811,6 +813,7 @@ function resolveEnvironmentOptions(
811813
resolve.preserveSymlinks,
812814
forceOptimizeDeps,
813815
consumer,
816+
logger,
814817
),
815818
dev: resolveDevEnvironmentOptions(
816819
options.dev,
@@ -991,7 +994,133 @@ function resolveDepOptimizationOptions(
991994
preserveSymlinks: boolean,
992995
forceOptimizeDeps: boolean | undefined,
993996
consumer: 'client' | 'server' | undefined,
997+
logger: Logger,
994998
): 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+
9951124
return mergeWithDefaults(
9961125
{
9971126
...configDefaults.optimizeDeps,
@@ -1006,6 +1135,21 @@ function resolveDepOptimizationOptions(
10061135
)
10071136
}
10081137

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+
10091153
export async function resolveConfig(
10101154
inlineConfig: InlineConfig,
10111155
command: 'build' | 'serve',
@@ -1569,6 +1713,8 @@ export async function resolveConfig(
15691713
resolved.build.ssrEmitAssets || resolved.build.emitAssets
15701714
}
15711715

1716+
applyDepOptimizationOptionCompat(resolved)
1717+
15721718
debug?.(`using resolved config: %O`, {
15731719
...resolved,
15741720
plugins: resolved.plugins.map((p) => p.name),

0 commit comments

Comments
 (0)