mirror of https://github.com/halo-dev/halo
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 ```pull/7586/head
parent
4ca0a09281
commit
b602195b11
|
@ -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);
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue