技术·MiniCordis:从零实现一个插件化 Runtime · 第 1 篇·2026-08-27·7 分钟

MiniCordis:从零实现一个插件化 Runtime

前面的 Cordis 从零开始教程,主要讨论的是一些核心 API 可以怎么用,以及这些 API 在一个最小场景里分别解决了什么问题。如果只想理解 Cordis 的基本使用,那一组内容其实已经足够了。

这一组 MiniCordis 教程想再往前走一步,换一个角度来看这个框架是怎么实现的。这里不会去完整复刻 Cordis,而是参照 Cordis 的思路,做一个简化版的 MiniCordis,一步一步实现其中一些关键 feature,用这个过程来帮助理解这些 Runtime 结构为什么会长成现在这样。

最后,我们还会再用自己做出来的 MiniCordis,把前面写过的打招呼程序重新实现一遍,看看这些能力组合起来以后,是否真的能支撑一个完整的小场景。

也需要先说明一点:这一组内容已经比前面的使用教程更深入一些,对大多数读者来说并不是必读部分。如果你只关心 Cordis 怎么使用,完全可以跳过这里;但如果你想进一步理解 Cordis 的内部思路,这一组内容会是一个比较自然的延伸。

配套代码仓库是 mini-cordis。仓库本身更偏向代码演进:12 个 tag,从 v0.1 到 v1.0,一个概念一个阶段;而这里的写法则会把这些阶段重新组织成更适合阅读和理解的教材结构。

MiniCordis Runtime 总览图
MiniCordis Runtime 总览图

这一组教程要建立什么认识

读完这一组内容,最重要的不是把方法名一条条记下来,而是先建立一个更稳定的判断,也就是:

MiniCordis 不是在复刻某个框架的表面 API,而是在把“能力会被安装、撤销、依赖、恢复、隔离”的 Runtime 模型,从零实现一遍。

前面提到的那些概念,看起来很多,但真正串起来以后,主线其实并不复杂。这一组教程会按下面这条顺序展开,让 Runtime 的结构一层层长出来:

text
空的 Context
   ↓
Service Registry
   ↓
Plugin
   ↓
Effect / Cleanup
   ↓
Plugin Scope
   ↓
Event
   ↓
Dependency Check
   ↓
Reactive Dependency
   ↓
Failure Isolation
   ↓
Child Context
   ↓
Final Demo

这一组教程为什么这样拆

如果完全按 v0.1、v0.2、v0.3 一段一段平铺,当然会非常忠实于代码演进,但读者也很容易被局部改动带着走,最后只记住“这里多了一个方法,那里多了一段逻辑”,却看不清更大的结构。因此这里采用的是“按问题分篇”的组织方式:每一篇都围绕一个更完整的问题展开,同时把对应的几个阶段放在一起讲。这样读的时候,注意力会更自然地落在“为什么这里必须往前走一步”,而不只是“这一版具体改了什么”。

这一组教程的阅读顺序如下:

  1. 1.第一篇:从空的 Context 到最小 Service Registry — 从空的 Context 出发,先建立“容器”和“能力表”这两个最小概念,对应 v0.1 到 v0.3。
  2. 2.第二篇:从直接 provide 到 Plugin、Effect 和 Scope — 从“谁来安装能力、谁来撤销能力”这个问题出发,引入 Plugin、Effect 和 Scope,对应 v0.4 到 v0.6。
  3. 3.第三篇:为什么 Event Listener 本身也是一种 Runtime Effect — 解释 Event 为什么不是独立的附加功能,而是可以直接落到现有 Runtime 模型上的另一种 Effect,对应 v0.7。
  4. 4.第四篇:从一次性依赖检查到响应式依赖生命周期 — 从一次性依赖检查推进到响应式依赖生命周期,对应 v0.8 和 v0.9。
  5. 5.第五篇:失败隔离与 Child Context — 讨论 Runtime 进入真实场景后,为什么必须处理失败隔离与树形 Context,对应 v0.10 和 v0.11。
  6. 6.第六篇:把所有机制重新拼回一个完整场景 — 最后把所有机制重新拼回 HelloCordis 场景,验证这套模型是否真的闭合,对应 v1.0。

这一组教程的读法

这套内容最适合顺着读,因为它本来就是一条从简单结构逐步长到完整 Runtime 的路线;不过每一篇也都尽量保持自成体系,所以如果你眼下最关心的是某个具体问题,也完全可以单独跳进去,比如先看 Plugin Scope,先看依赖生命周期,或者最后再回来看完整 Demo。只是从整体理解上说,顺着读会更容易看到前后概念是怎样一层层接起来的。

《MiniCordis:从零实现一个插件化 Runtime》合集 · 第 1 / 7 篇