插件架构
Plugin Architecture
通过接口定义+注册表模式实现可插拔组件系统,支持运行时发现和替换
子问题
1.插件发现与加载
2.接口契约定义
3.插件配置传递
4.多实现切换
5.Web 端 webpack 无法动态 import 的适配
6.插件实例的生命周期管理(无 unregister)
7.跨 slot 插件组合的类型安全保证
各项目的解法1 solutions
Signals
横向对比
| 维度 | Agent |
|---|---|
| 插件注册方式 | slot:name 复合键 Map + manifest 声明 + create 工厂函数 |
| 插件分组/权限 | 7 种 PluginSlot 类型枚举,每个 slot 独立接口契约 |
| 热更新/缓存 | register 覆盖式更新,Web 端 globalThis 单例缓存 |
| 配置传递 | create(config?) 工厂参数 + OrchestratorConfig 全局/项目级覆盖 |
| 双轨加载 | CLI 动态 import + Web 静态 import 手动注册,适配 webpack 限制 |
| 类型安全 | PluginModule<T> 泛型 + satisfies 编译期检查 + get<T> 泛型断言 |
最佳实践
1.每个插件实现单一接口并导出 PluginModule
2.使用 slot:name 键值注册避免冲突
3.用 satisfies PluginModule<T> 在编译期验证插件导出结构
4.loadBuiltins 接受 importFn 参数实现测试时 mock 注入
5.未安装的插件包在 catch 中静默跳过实现按需安装体验