目录
NOP Chaos Flux:可逆计算的前端运行时
NOP Chaos Flux 是 Nop 平台的前端运行时和渲染框架,项目地址 nop-chaos-flux。它与后端 nop-entropy 共享同一种设计哲学:可逆计算的差量定制,但从前端的角度重新实现。
Flux 用一句口号概括自己:“Schema that executes, not just renders”——它不只是在渲染 JSON 描述的页面,而是在执行一个结构化模型。
Flux 与 AMIS 的关系
Nop 前端此前基于 百度 AMIS 框架(nop-chaos-next)。Flux 在此基础上进一步演化:
| 对比维度 | NOP Chaos Next | NOP Chaos Flux |
|---|---|---|
| 定位 | 企业应用框架 | 低代码运行时与渲染框架 |
| 渲染层 | 基于 AMIS(React 19) | 自定义渲染架构 |
| 状态管理 | Zustand + React Query | 框架无关的 Zustand store |
| 核心能力 | 插件系统 + 扩展体系 | 七个原语构建的运行时 |
| 设计器 | 集成第三方 | 内建 Flow/Report/电子表格设计器 |
| 适用场景 | 业务团队构建应用 | 平台团队构建低代码基础设施 |
简单说:Flux 是 “How to generate UI from JSON”,Next 是 “How to build extensible business applications”。Future 可以集成 Flux 的设计器和运行时能力。
七个原语
Flux 的核心很小——只有七个原语。表单、表格、对话框、设计器都在这些原语之上构建:
| 原语 | 职责 |
| —— | —— |
| Template | 编译后的程序结构、区域组合、生命周期锚点 |
| ScopeRef | 词法作用域数据环境 |
| Value | 字面量、表达式、模板、数组、对象的执行模型 |
| Resource | 运行时持有的值生产者(如数据加载) |
| Reaction | 声明式 watch/effect 原语 |
| Capability | 副作用唯一的授权通道 |
| Host Projection | 宿主状态的只读投影,注入 schema 可见的作用域 |
架构分层
Flux 的包结构遵循清晰的分层架构:
flux-core → 原语契约、共享类型、纯工具函数 flux-formula → 表达式和模板编译 flux-compiler → Schema 编译、标准化、诊断 flux-action-core → Action 降级、选择器分类、控制流执行 flux-runtime → 作用域、Action、校验、页面和表单运行时 flux-react → React 桥接(hooks、渲染句柄) ↓ renderers → 页面、布局、表单、数据渲染器 designers → 流程设计器、报表设计器、电子表格、文字编辑器
这种分层的目的是:可逆计算的编译期概念在前端找到对应。表达式在运行时之前编译,值语义统一,作用域词法明确。
30 秒示例
一个简单的表单定义:
{
"type": "form",
"data": {
"name": "Alice"
},
"body": [
{
"type": "text",
"text": "Hello ${name || 'Anonymous'}"
},
{
"type": "input-text",
"name": "name",
"label": "Name",
"required": true,
"minLength": 3
}
],
"actions": [
{
"type": "button",
"label": "Save",
"onClick": {
"action": "submitForm"
}
}
]
}
Flux 的处理流程:
1. **编译期** — 分析 JSON,标记哪些值是表达式(${})、哪些是字面量、哪些是模板
2. **运行期** — 实例化 ScopeRef,建立词法作用域
3. **渲染期** — React 根据编译结果渲染对应组件
4. **交互期** — 表单校验、数据绑定、Action 路由
Flow Designer 设计器
Flux 内建了一个流程设计器工作台,包含:
- 节点面板(拖拽添加)
- 画布编辑(连线、布局)
- 属性面板(选中节点后编辑参数)
- 工具栏(缩放、撤销、重做)
这是可逆计算思维在前端的体现——流程定义本身是一个结构化 DSL,可以在设计器中以可视化方式编辑,然后序列化为 JSON 存储,后端可以对该 JSON 施加 Delta 定制。
与前端的 Delta 定制
Flux 的 JSON Schema 设计天然支持差量合并:
- 基础页面定义由后端自动生成
- 定制层通过 Delta 机制覆盖或扩展基础定义
- 合并后的 JSON 送入 Flux 编译执行
这意味着前后端共享同一种定制哲学——不修改基础产物,通过叠加差量层实现定制。
项目状态
- 开发语言:TypeScript
- 构建工具:Vite + pnpm monorepo
- 测试框架:Vitest + Playwright
- UI 框架:React 19 + TailwindCSS 4
- 许可证:MIT
- 当前入口:apps/playground(本地运行 pnpm dev 后访问 :5173)
快速体验
git clone https://github.com/entropy-cloud/nop-chaos-flux.git cd nop-chaos-flux pnpm install pnpm dev
浏览器打开 http://localhost:5173 后,推荐从以下场景入手:
- Flux Basic — 表单、校验、数据绑定
- Flow Designer — 流程设计器工作台
- Debugger Lab — 诊断工具、事件追踪