Skip to content

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.onPluginInstalledfunction插件安装完成回调
options.onPluginUninstalledfunction插件卸载完成回调

返回值

类型说明
PluginSystem<T>插件系统对象

工作原理

  1. 初始化

    • 创建插件列表的响应式 ref
    • 创建共享上下文对象
  2. use(plugin)

    • 检查插件是否已安装(根据 name)
    • 如果未安装:
      • 调用 plugin.install(context)
      • 将插件添加到列表
      • 调用 onPluginInstalled 回调
    • 如果已安装:跳过
  3. unuse(pluginName)

    • 查找插件
    • 如果插件有 uninstall 方法,调用 plugin.uninstall(context)
    • 从列表中移除插件
    • 调用 onPluginUninstalled 回调
  4. getPlugin(name):根据名称查找插件

  5. hasPlugin(name):检查插件是否已安装

  6. context:所有插件共享的上下文对象,插件可以在其中存储状态或方法

支持异步 install 方法,插件间可通过 context 通信。