Cordis核心概念图解:Context、Fiber与Plugin的三体关系
【免费下载链接】cordisMeta-Framework of Spatiotemporal Composability项目地址: https://gitcode.com/GitHub_Trending/co/cordis
Cordis 是一个面向**时空可组合性(Spatiotemporal Composability)**的元框架,它用三个核心概念撑起整个插件生态:Context(上下文)、Fiber(纤维)与Plugin(插件)。理解这三者的关系,是掌握 Cordis 插件框架的第一步。这篇文章将用图解和对比的方式,帮你快速看懂"三体"如何各司其职、又如何协同完成一次插件的装载、运行与卸载。
为什么 Cordis 需要"三体"结构?
传统插件框架通常只有"容器"和"插件"两层,而 Cordis 多引入了一层Fiber,正是这一层让它实现了真正的时空可组合性:
- 空间维度:同一插件可以在不同 Context 中并存,互不干扰;
- 时间维度:插件可以随时装载、热更新、卸载,生命周期被精确管理。
把"运行环境""执行单元""功能定义"三者分离,是 Cordis 设计最精妙的地方。
三大主角速览:一张表看懂分工
| 概念 | 一句话解释 | 核心文件 | 比喻 |
|---|---|---|---|
| Context | 应用运行的"容器环境",承载服务与事件 | packages/core/src/context.ts | 舞台 |
| Fiber | 插件实例的"生命周期引擎",管理副作用 | packages/core/src/fiber.ts | 演员的档期与场务 |
| Plugin | 功能单元的"定义",可复用可组合 | packages/core/src/registry.ts | 剧本 |
Context 图解:承载一切的运行环境
**Context(上下文)**是 Cordis 中所有能力的入口。你通过它注册插件、监听事件、获取服务,它内部自动集成了四个服务:
events:事件分发(emit、serial、bail等);logger:日志输出;reflect:服务的反射与依赖注入;registry:插件的注册与管理。
Context 最强大的地方在于它可以extend()出子上下文,子上下文继承父级能力,还能通过isolate()隔离命名空间、intercept()覆写服务配置。在 context.ts 中,Context 通过 Proxy 拦截属性的读写,实现"取不到就报错"的严格依赖检查。
Fiber 图解:插件的生命周期引擎
**Fiber(纤维)**是 Cordis 与其他框架最大的区别。每当你调用ctx.plugin()装载一个插件,Cordis 都会为它创建一个 Fiber,专门管理该插件实例的全部副作用(事件监听、定时器、服务注册等)。
Fiber 内部有一套严谨的状态机,定义在 fiber.ts 中:
| 状态 | 含义 |
|---|---|
PENDING | 等待装载 |
LOADING | 正在执行插件逻辑 |
ACTIVE | 正常运行中 |
FAILED | 初始化或运行出错 |
UNLOADING | 正在卸载 |
DISPOSED | 已销毁 |
Fiber 通过effect()收集插件产生的所有副作用,卸载时按"后进先出"的顺序自动清理,这就是 Cordis 能做到热更新零泄漏的秘密。
Plugin 图解:功能单元的组装方式
**Plugin(插件)**是功能的载体,Cordis 支持三种写法:函数、类与对象。插件通过声明inject(注入依赖)和provide(提供服务),实现插件之间的解耦协作。
在 registry.ts 中可以看到,同一个插件函数会被缓存为唯一的Runtime,这意味着同一个插件可以在不同 Context 中多次装载——这正是"空间可组合性"的体现。
三体关系图解:一次完整的插件装载流程
把三者串起来看,一次装载的完整流程是这样的:
简单来说:Context 提供舞台,Plugin 定义剧本,Fiber 负责让剧本在舞台上演出并负责谢幕。
依赖注入与生命周期:三体如何协作
三体协作最典型的场景是服务依赖:
- 插件 A 在装载时通过
provide('database')注册服务; - 插件 B 声明
inject: ['database']; - Fiber 会检查 B 的依赖是否已就绪,未就绪则保持
PENDING; - 当 A 的服务注册完成,B 的 Fiber 自动转为
ACTIVE并执行; - 若 A 被卸载,B 会随之被优雅清理或重载。
这种"声明式依赖 + 自动调度"机制,让大型插件系统的组装变得异常简单,你可以通过 isolate.spec.ts 等测试文件直观感受这些行为。
快速上手:三分钟体验三体协作
想立刻体验,先克隆仓库:
git clone https://gitcode.com/GitHub_Trending/co/cordis然后从packages/core开始阅读:先看 index.ts 了解导出结构,再对照 context.ts、fiber.ts、registry.ts 三个文件理解三体实现,最后运行packages/core/tests下的测试用例验证你的理解。
总结:记住这三句话就够了
- Context 是环境:所有能力都从它出发,可以无限扩展与隔离;
- Plugin 是定义:描述"做什么",可复用、可组合;
- Fiber 是执行:管好"什么时候做、何时清理",让组合变得安全可靠。
理解了三者的关系,你就掌握了 Cordis 插件框架的钥匙。下一篇文章,我们将深入 Fiber 的 effect 机制,看看热更新与零泄漏究竟是如何做到的。😉
【免费下载链接】cordisMeta-Framework of Spatiotemporal Composability项目地址: https://gitcode.com/GitHub_Trending/co/cordis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考