![]() Signed-off-by: Ryan Wang <i@ryanc.cc> |
||
---|---|---|
.. | ||
src | ||
README.md | ||
package.json | ||
tsconfig.json | ||
tsdown.config.ts |
README.md
@halo-dev/ui-plugin-bundler-kit
A frontend build toolkit for Halo plugin development, supporting both Vite and Rsbuild build systems.
Introduction
@halo-dev/ui-plugin-bundler-kit
is a frontend build configuration toolkit specifically designed for Halo plugin development. It provides pre-configured build settings to help developers quickly set up and build frontend interfaces for Halo plugins.
Key Features
- đ Ready to Use - Provides pre-configured Vite and Rsbuild build settings
- đĻ Multi-Build Tool Support - Supports both Vite and Rsbuild
- đ§ Flexible Configuration - Supports custom build configurations
- đ¯ Halo Optimized - External dependencies and global variables optimized for Halo plugin development
- đ Smart Output - Automatically selects output directory based on environment
Installation
# Using npm
npm install @halo-dev/ui-plugin-bundler-kit
# Using yarn
yarn add @halo-dev/ui-plugin-bundler-kit
# Using pnpm
pnpm add @halo-dev/ui-plugin-bundler-kit
Additional Dependencies
For Vite users, you need to install Vite:
npm install vite
For Rsbuild users, you need to install Rsbuild:
npm install @rsbuild/core
Usage
Vite Configuration
Create or update vite.config.ts
file in your project root:
import { viteConfig } from "@halo-dev/ui-plugin-bundler-kit";
export default viteConfig({
vite: {
// Your custom Vite configuration
plugins: [
// Additional plugins (Vue plugin is already included)
],
// Other configurations...
},
});
Note: Vue plugin is pre-configured, no need to add it manually.
Rsbuild Configuration
Create or update rsbuild.config.ts
file in your project root:
import { rsbuildConfig } from "@halo-dev/ui-plugin-bundler-kit";
export default rsbuildConfig({
rsbuild: {
// Your custom Rsbuild configuration
plugins: [
// Additional plugins (Vue plugin is already included)
],
// Other configurations...
},
});
Note: Vue plugin is pre-configured, no need to add it manually.
Legacy Configuration (Deprecated)
â ī¸ Note: The
HaloUIPluginBundlerKit
function is deprecated. Please useviteConfig
orrsbuildConfig
instead.
import { HaloUIPluginBundlerKit } from "@halo-dev/ui-plugin-bundler-kit";
export default {
plugins: [
HaloUIPluginBundlerKit({
// Configuration options
}),
],
};
Configuration Options
Vite Configuration Options
interface ViteUserConfig {
/**
* Halo plugin manifest file path
* @default "../src/main/resources/plugin.yaml"
*/
manifestPath?: string;
/**
* Custom Vite configuration
*/
vite: UserConfig | UserConfigFnObject;
}
Rsbuild Configuration Options
interface RsBuildUserConfig {
/**
* Halo plugin manifest file path
* @default "../src/main/resources/plugin.yaml"
*/
manifestPath?: string;
/**
* Custom Rsbuild configuration
*/
rsbuild: RsbuildConfig | ((env: ConfigParams) => RsbuildConfig);
}
Advanced Configuration Examples
Adding Path Aliases (Vite)
import { viteConfig } from "@halo-dev/ui-plugin-bundler-kit";
import path from "path";
export default viteConfig({
vite: {
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
"@components": path.resolve(__dirname, "src/components"),
},
},
},
});
Adding Path Aliases (Rsbuild)
import { rsbuildConfig } from "@halo-dev/ui-plugin-bundler-kit";
export default rsbuildConfig({
rsbuild: {
source: {
alias: {
"@": "./src",
"@components": "./src/components",
},
},
},
});
Adding Additional Vite Plugins
import { viteConfig } from "@halo-dev/ui-plugin-bundler-kit";
import { defineConfig } from "vite";
import UnoCSS from "unocss/vite";
export default viteConfig({
vite: {
plugins: [
UnoCSS(), // Add UnoCSS plugin
],
},
});
Adding Additional Rsbuild Plugins
import { rsbuildConfig } from "@halo-dev/ui-plugin-bundler-kit";
import { pluginSass } from "@rsbuild/plugin-sass";
export default rsbuildConfig({
rsbuild: {
plugins: [
pluginSass(), // Add Sass plugin
],
},
});
Custom Plugin Manifest Path
import { viteConfig } from "@halo-dev/ui-plugin-bundler-kit";
export default viteConfig({
manifestPath: "application/src/main/resources/plugin.yaml", // Custom manifest file path
vite: {
// Other configurations...
},
});
Development Scripts
Recommended scripts to add to your package.json
:
{
"scripts": {
"dev": "vite dev --mode=development --watch",
"build": "vite build"
}
}
For Rsbuild:
{
"scripts": {
"dev": "rsbuild dev --env-mode=development --watch",
"build": "rsbuild build"
}
}
Build Output
Relative to the root directory of the Halo plugin project
- Development:
build/resources/main/console
- Production:
ui/build/dist
Note: The production build output directory of
HaloUIPluginBundlerKit
is stillsrc/main/resources/console
to ensure compatibility.
Requirements
- Node.js: ^18.0.0 || >=20.0.0
- Peer Dependencies:
@rsbuild/core
: ^1.0.0 (when using Rsbuild)@rsbuild/plugin-vue
: ^1.0.0 (when using Rsbuild)@vitejs/plugin-vue
: ^4.0.0 || ^5.0.0 (when using Vite)vite
: ^4.0.0 || ^5.0.0 || ^6.0.0 (when using Vite)
Vite vs Rsbuild
Both Vite and Rsbuild are excellent build tools, but they have different strengths depending on your use case:
When to Use Rsbuild
Recommended for large-scale plugins
- â Code Splitting Support - Rsbuild provides excellent support for code splitting and lazy loading
- â Better Performance - Generally faster build times and smaller bundle sizes for complex applications
- â Dynamic Imports - Perfect for plugins with heavy frontend components
Example with dynamic imports:
import { definePlugin } from "@halo-dev/console-shared";
import { defineAsyncComponent } from "vue";
import { VLoading } from "@halo-dev/components";
export default definePlugin({
routes: [
{
parentName: "Root",
route: {
path: "demo",
name: "DemoPage",
// Lazy load heavy components
component: defineAsyncComponent({
loader: () => import("./views/DemoPage.vue"),
loadingComponent: VLoading,
}),
},
},
],
extensionPoints: {},
});
When to Use Vite
Recommended for simple to medium-scale plugins
- â Vue Ecosystem Friendly - Better integration with Vue ecosystem tools and plugins
- â Rich Plugin Ecosystem - Extensive collection of Vite plugins available
- â Simple Configuration - Easier to configure for straightforward use cases
Summary
Feature | Vite | Rsbuild |
---|---|---|
Code Splitting | â Limited | â Excellent |
Vue Ecosystem | â Excellent | â Good |
Build Performance | â Good | â Excellent |
Dev Experience | â Excellent | â Excellent |
Plugin Ecosystem | â Rich | â Growing |
Configuration | â Simple | âī¸ Moderate |
Recommendation: Use Rsbuild for complex plugins with large frontend codebases, and Vite for simpler plugins or when you need extensive Vue ecosystem integration.
License
GPL-3.0
Contributing
Issues and Pull Requests are welcome! Please check our Contributing Guide for more information.