====== NOP Chaos Flux:可逆计算的前端运行时 ======
NOP Chaos Flux 是 Nop 平台的前端运行时和渲染框架,项目地址 [[https://github.com/entropy-cloud/nop-chaos-flux|nop-chaos-flux]]。它与后端 nop-entropy 共享同一种设计哲学:**可逆计算的差量定制**,但从前端的角度重新实现。
Flux 用一句口号概括自己:**"Schema that executes, not just renders"**——它不只是在渲染 JSON 描述的页面,而是在执行一个结构化模型。
===== Flux 与 AMIS 的关系 =====
Nop 前端此前基于 [[https://baidu.github.io/amis/|百度 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** — 诊断工具、事件追踪
===== 进一步阅读 =====
* [[.:frontend_guide|Nop 平台前端架构]]
* [[https://github.com/entropy-cloud/nop-chaos-flux/tree/master/docs|Flux 文档索引]]
* [[https://github.com/entropy-cloud/nop-chaos-flux/blob/master/docs/articles/flux-design-introduction.md|Flux 设计介绍]]