usePluginSystem
创建插件系统,支持插件注册、生命周期钩子和插件通信。
函数签名
typescript
function usePluginSystem<T extends Record<string, any>>(
options?: PluginSystemOptions
): PluginSystem<T>
interface Plugin<T> {
name: string
install: (context: T) => void | Promise<void>
uninstall?: (context: T) => void
}
interface PluginSystemOptions {
onPluginInstalled?: (plugin: Plugin<any>) => void
onPluginUninstalled?: (plugin: Plugin<any>) => void
}
interface PluginSystem<T> {
use: (plugin: Plugin<T>) => Promise<void>
unuse: (pluginName: string) => void
getPlugin: (name: string) => Plugin<T> | undefined
hasPlugin: (name: string) => boolean
plugins: Ref<Plugin<T>[]>
context: T
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
options.onPluginInstalled | function | 否 | 插件安装完成回调 |
options.onPluginUninstalled | function | 否 | 插件卸载完成回调 |
返回值
| 类型 | 说明 |
|---|---|
PluginSystem<T> | 插件系统对象 |
工作原理
初始化:
- 创建插件列表的响应式 ref
- 创建共享上下文对象
use(plugin):
- 检查插件是否已安装(根据 name)
- 如果未安装:
- 调用 plugin.install(context)
- 将插件添加到列表
- 调用 onPluginInstalled 回调
- 如果已安装:跳过
unuse(pluginName):
- 查找插件
- 如果插件有 uninstall 方法,调用 plugin.uninstall(context)
- 从列表中移除插件
- 调用 onPluginUninstalled 回调
getPlugin(name):根据名称查找插件
hasPlugin(name):检查插件是否已安装
context:所有插件共享的上下文对象,插件可以在其中存储状态或方法
支持异步 install 方法,插件间可通过 context 通信。