From b602195b11ac1bf50f0d9e8bf54778f6c3d70724 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 19 Jun 2025 16:05:01 +0800 Subject: [PATCH] feat(ui-plugin-bundler-kit): support function-based configuration for env-aware builds (#7572) #### What type of PR is this? /area ui /area plugin /kind improvement /milestone 2.21.x #### What this PR does / why we need it: rsbuild example: ```ts export default rsbuildConfig({ rsbuild: ({ env, envMode }) => { console.log(env,envMode); return { resolve: { alias: { "@": "./src", }, }, plugins: [pluginSass()], }; }, }); ``` ```ts export default viteConfig({ vite: ({ mode }) => { const env = loadEnv(mode, process.cwd(), ''); console.log(env); return { resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), }, }, }; }, }); ``` #### Does this PR introduce a user-facing change? ```release-note None ``` --- ui/packages/ui-plugin-bundler-kit/README.md | 4 ++-- ui/packages/ui-plugin-bundler-kit/src/rsbuild.ts | 9 +++++++-- ui/packages/ui-plugin-bundler-kit/src/vite.ts | 15 ++++++++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ui/packages/ui-plugin-bundler-kit/README.md b/ui/packages/ui-plugin-bundler-kit/README.md index b5aaaf61a..d1817bedc 100644 --- a/ui/packages/ui-plugin-bundler-kit/README.md +++ b/ui/packages/ui-plugin-bundler-kit/README.md @@ -114,7 +114,7 @@ interface ViteUserConfig { /** * Custom Vite configuration */ - vite: UserConfig; + vite: UserConfig | UserConfigFnObject; } ``` @@ -131,7 +131,7 @@ interface RsBuildUserConfig { /** * Custom Rsbuild configuration */ - rsbuild: RsbuildConfig; + rsbuild: RsbuildConfig | ((env: ConfigParams) => RsbuildConfig); } ``` diff --git a/ui/packages/ui-plugin-bundler-kit/src/rsbuild.ts b/ui/packages/ui-plugin-bundler-kit/src/rsbuild.ts index fa040e28f..08f6e24d2 100644 --- a/ui/packages/ui-plugin-bundler-kit/src/rsbuild.ts +++ b/ui/packages/ui-plugin-bundler-kit/src/rsbuild.ts @@ -3,6 +3,7 @@ import { mergeRsbuildConfig, type RsbuildConfig, type RsbuildMode, + type ConfigParams, } from "@rsbuild/core"; import { getHaloPluginManifest } from "./utils/halo-plugin"; import { DEFAULT_OUT_DIR_DEV, DEFAULT_OUT_DIR_PROD } from "./constants/build"; @@ -21,7 +22,7 @@ export interface RsBuildUserConfig { /** * Custom Rsbuild config. */ - rsbuild: RsbuildConfig; + rsbuild: RsbuildConfig | ((env: ConfigParams) => RsbuildConfig); } function createRsbuildPresetsConfig(manifestPath: string) { @@ -134,6 +135,10 @@ export function rsbuildConfig(config?: RsBuildUserConfig) { ); return defineConfig((env) => { const presetsConfig = presetsConfigFn(env); - return mergeRsbuildConfig(presetsConfig, config?.rsbuild || {}); + const userConfig = + typeof config?.rsbuild === "function" + ? config.rsbuild(env) + : config?.rsbuild || {}; + return mergeRsbuildConfig(presetsConfig, userConfig); }); } diff --git a/ui/packages/ui-plugin-bundler-kit/src/vite.ts b/ui/packages/ui-plugin-bundler-kit/src/vite.ts index 89fd73f1b..afc5b2815 100644 --- a/ui/packages/ui-plugin-bundler-kit/src/vite.ts +++ b/ui/packages/ui-plugin-bundler-kit/src/vite.ts @@ -1,4 +1,9 @@ -import { defineConfig, mergeConfig, UserConfig } from "vite"; +import { + defineConfig, + mergeConfig, + UserConfig, + UserConfigFnObject, +} from "vite"; import Vue from "@vitejs/plugin-vue"; import { EXTERNALS, GLOBALS } from "./constants/externals"; import { DEFAULT_OUT_DIR_DEV, DEFAULT_OUT_DIR_PROD } from "./constants/build"; @@ -16,7 +21,7 @@ export interface ViteUserConfig { /** * Custom Vite config. */ - vite: UserConfig; + vite: UserConfig | UserConfigFnObject; } function createVitePresetsConfig(manifestPath: string) { @@ -72,6 +77,10 @@ export function viteConfig(config?: ViteUserConfig) { ); return defineConfig((env) => { const presetsConfig = presetsConfigFn(env); - return mergeConfig(presetsConfig, config?.vite || {}); + const userConfig = + typeof config?.vite === "function" + ? config.vite(env) + : config?.vite || {}; + return mergeConfig(presetsConfig, userConfig); }); }