Skip to content
目录

插件架构详解

Univer 几乎所有能力都是 Plugin:在生命周期里向 Injector 注册服务,并挂接命令、渲染扩展等。


1. 插件生命周期

阶段典型工作
onStarting注册 DI、命令 handler
onReady依赖已就绪,初始化数据监听
onRenderedDOM / Canvas 已就绪,挂 UI
onSteady稳定态收尾

顺序保证:服务先于 UI,避免未注册就渲染。


2. 逻辑插件 vs UI 插件

逻辑插件UI 插件
命令、数据、公式菜单、面板、快捷键
可跑在 Node / Worker依赖浏览器 DOM
例:@univerjs/sheets-filter例:sheets-filter-ui

同功能拆包便于无头计算、SSR、测试


3. 注册方式(概念)

  • Univer.registerPlugin(PluginClass, config)
  • 插件内 dependencies.forEach(d => injector.add(d))
  • Controller 常作为可注入类,在构造时订阅 Command / 生命周期

不贴具体类名实现;读源码从 packages/core/src/services/plugin/ 与任一 packages/sheets-* 插件入手。


4. 插件间协作

  • 通过 共享 Command IDService 接口 协作,避免互相 import 实现类。
  • 拦截器 / Hook 扩展他人命令前后逻辑(见 05、09)。

5. 实践建议

  • 新功能先定 MUTATION 列表,再写 COMMAND 与插件。
  • UI 插件只调 Facade 或 Command,勿直接改 Worksheet 内部结构。
  • 配置通过插件 config 传入,避免全局单例。

6. 总结

插件 = Univer 的模块系统;排错先看插件是否走到 onReady、服务是否注册进当前 Injector。

MIT License.