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
|
* Custom Vite configuration
|
||||||
*/
|
*/
|
||||||
vite: UserConfig;
|
vite: UserConfig | UserConfigFnObject;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ interface RsBuildUserConfig {
|
||||||
/**
|
/**
|
||||||
* Custom Rsbuild configuration
|
* Custom Rsbuild configuration
|
||||||
*/
|
*/
|
||||||
rsbuild: RsbuildConfig;
|
rsbuild: RsbuildConfig | ((env: ConfigParams) => RsbuildConfig);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {
|
||||||
mergeRsbuildConfig,
|
mergeRsbuildConfig,
|
||||||
type RsbuildConfig,
|
type RsbuildConfig,
|
||||||
type RsbuildMode,
|
type RsbuildMode,
|
||||||
|
type ConfigParams,
|
||||||
} from "@rsbuild/core";
|
} from "@rsbuild/core";
|
||||||
import { getHaloPluginManifest } from "./utils/halo-plugin";
|
import { getHaloPluginManifest } from "./utils/halo-plugin";
|
||||||
import { DEFAULT_OUT_DIR_DEV, DEFAULT_OUT_DIR_PROD } from "./constants/build";
|
import { DEFAULT_OUT_DIR_DEV, DEFAULT_OUT_DIR_PROD } from "./constants/build";
|
||||||
|
@ -21,7 +22,7 @@ export interface RsBuildUserConfig {
|
||||||
/**
|
/**
|
||||||
* Custom Rsbuild config.
|
* Custom Rsbuild config.
|
||||||
*/
|
*/
|
||||||
rsbuild: RsbuildConfig;
|
rsbuild: RsbuildConfig | ((env: ConfigParams) => RsbuildConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createRsbuildPresetsConfig(manifestPath: string) {
|
function createRsbuildPresetsConfig(manifestPath: string) {
|
||||||
|
@ -134,6 +135,10 @@ export function rsbuildConfig(config?: RsBuildUserConfig) {
|
||||||
);
|
);
|
||||||
return defineConfig((env) => {
|
return defineConfig((env) => {
|
||||||
const presetsConfig = presetsConfigFn(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 Vue from "@vitejs/plugin-vue";
|
||||||
import { EXTERNALS, GLOBALS } from "./constants/externals";
|
import { EXTERNALS, GLOBALS } from "./constants/externals";
|
||||||
import { DEFAULT_OUT_DIR_DEV, DEFAULT_OUT_DIR_PROD } from "./constants/build";
|
import { DEFAULT_OUT_DIR_DEV, DEFAULT_OUT_DIR_PROD } from "./constants/build";
|
||||||
|
@ -16,7 +21,7 @@ export interface ViteUserConfig {
|
||||||
/**
|
/**
|
||||||
* Custom Vite config.
|
* Custom Vite config.
|
||||||
*/
|
*/
|
||||||
vite: UserConfig;
|
vite: UserConfig | UserConfigFnObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createVitePresetsConfig(manifestPath: string) {
|
function createVitePresetsConfig(manifestPath: string) {
|
||||||
|
@ -72,6 +77,10 @@ export function viteConfig(config?: ViteUserConfig) {
|
||||||
);
|
);
|
||||||
return defineConfig((env) => {
|
return defineConfig((env) => {
|
||||||
const presetsConfig = presetsConfigFn(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