NocoBase 开源项目源码深度分析

在 GitHub 上扫了一圈开源低代码平台,NocoBase 是我觉得"架构上最值得扒"的那一个------21k+ stars,数据模型优先、UI 与结构解耦、everything is a plugin,Node + React + Koa 这套主流栈,看着像给企业用的 WordPress。但它微内核到底微在哪、插件怎么做到装卸不影响内核、数据模型层怎么托住"无代码配置 + 有代码扩展"这两件事------本文就从源码层面拆给你看。

一、项目概览

1.1 定位与愿景

NocoBase 是一个开源、自托管、AI 驱动的无代码/低代码开发平台,专为构建企业级业务系统而设计。其核心理念是:

"No-code 和 AI 不是银弹,人类、AI 和代码协同工作的框架才是可靠企业系统的基础。"

与市面上大多数无代码平台不同,NocoBase 采用数据模型驱动而非表单/表格驱动的方式,将数据结构(Data Structure)与用户界面(UI)完全解耦。这意味着:

  • 同一个数据表(Collection)可以衍生出无限多种视图(Block)
  • UI 变更不会影响底层数据模型
  • 支持主数据库、外部数据库和第三方 API 作为统一数据源

1.2 核心特性

特性 说明
数据模型驱动 先定义数据结构和关系,再构建界面,类似传统数据库设计
所见即所得 一键切换使用模式和配置模式,页面像 Notion 一样自由编排
插件微内核 所有功能都是插件,类似 WordPress,安装即用
AI 员工 将 AI 能力深度嵌入业务场景,而非简单的聊天机器人
多数据源 支持 MySQL、PostgreSQL、SQLite、Oracle、SQL Server 等
工作流引擎 可视化流程编排,支持条件分支、循环、并行、审批链
权限体系 细粒度的 RBAC,支持字段级、集合级、操作级权限控制

二、整体架构设计

2.1 微内核架构(Microkernel Architecture)

NocoBase 采用插件式微内核架构,这是其最核心的设计哲学:

scss 复制代码
┌─────────────────────────────────────────────────────────────┐
│                      微内核 (Microkernel)                    │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ 应用生命周期 │  │ 插件管理器   │  │ 共享服务注册表       │  │
│  │ (Lifecycle)  │  │ (Manager)   │  │ (Service Registry)  │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        ▼                     ▼                     ▼
┌───────────────┐   ┌───────────────┐   ┌───────────────┐
│   核心插件     │   │   官方插件     │   │   第三方插件   │
│  (Core)       │   │  (Official)   │   │  (Community)  │
│               │   │               │   │               │
│ • 用户管理    │   │ • 工作流      │   │ • 自定义业务  │
│ • 认证授权    │   │ • 数据可视化  │   │ • 行业模板   │
│ • 数据源管理  │   │ • 日历/看板   │   │ • 集成扩展   │
│ • 集合管理    │   │ • 文件存储    │   │               │
│ • 权限控制    │   │ • AI 能力     │   │               │
└───────────────┘   └───────────────┘   └───────────────┘

微内核的职责

  • 插件的生命周期管理(注册、安装、激活、停用、卸载)
  • 共享服务的注册与发现(数据库连接、缓存、消息队列等)
  • 前后端应用实例的创建与销毁
  • 配置加载与环境初始化

插件的职责

  • 所有业务逻辑都封装在插件中
  • 插件之间通过声明式依赖关系协作
  • 插件可以扩展:页面、区块、操作、API、数据源、字段类型等

2.2 前后端分离架构

scss 复制代码
┌──────────────────────────────────────────────────────────────┐
│                        客户端 (Client)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ React SPA   │  │ Schema 驱动 │  │ 区块/操作体系        │  │
│  │             │  │ UI 系统     │  │ (Block/Action)      │  │
│  │ • 路由管理  │  │ • JSON配置  │  │ • 表格/表单/看板    │  │
│  │ • 状态管理  │  │ • 可视化编辑│  │ • 日历/甘特图/图表  │  │
│  │ • API 客户端│  │ • 组件渲染  │  │ • 自定义操作        │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└──────────────────────────────────────────────────────────────┘
                              │ REST API / WebSocket
                              ▼
┌──────────────────────────────────────────────────────────────┐
│                        服务端 (Server)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ Koa HTTP    │  │ 数据库抽象层 │  │ 插件运行时           │  │
│  │ 服务框架    │  │ (Sequelize) │  │ (Plugin Runtime)    │  │
│  │             │  │             │  │                     │  │
│  │ • 中间件栈  │  │ • 集合模型  │  │ • 事件系统          │  │
│  │ • 路由注册  │  │ • 字段类型  │  │ • 钩子机制          │  │
│  │ • 请求处理  │  │ • 关系映射  │  │ • 资源操作          │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└──────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────┐
│                        数据层 (Data Layer)                    │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ 主数据库     │  │ 外部数据库   │  │ 第三方 API         │  │
│  │ PostgreSQL  │  │ MySQL       │  │ REST/GraphQL       │  │
│  │ MySQL       │  │ SQL Server  │  │ SDK 集成           │  │
│  │ SQLite      │  │ Oracle      │  │ 文件数据源         │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└──────────────────────────────────────────────────────────────┘

三、技术栈详解

3.1 服务端技术栈

技术 版本 角色 说明
Node.js ≥ 18 运行时 服务端 JavaScript 运行时
Koa ^2.15.4 HTTP 框架 轻量级、基于中间件的 Web 框架
TypeScript 5.1.3 类型系统 全栈类型安全
Sequelize via @nocobase/database ORM 数据库抽象层,支持多数据库
Lerna + Yarn Workspaces --- Monorepo 多包管理
Docker --- 部署 容器化部署支持

关键设计决策

  • 选择 Koa 而非 Express:Koa 的洋葱模型中间件更适合插件化的拦截和扩展
  • 自研 @nocobase/database:在 Sequelize 之上封装了 Collection/Field 模型,支持动态 DDL
  • Monorepo 结构:核心包、插件包、示例包统一管理,便于版本协调

3.2 客户端技术栈

技术 版本 角色 说明
React ^18.0.0 UI 框架 组件化前端框架
Ant Design 5.24.2 UI 组件库 企业级设计系统
Formily 1.2.3 表单引擎 复杂表单渲染与验证
React Router ^6.30.1 路由 客户端路由管理
i18next ^22.4.9 国际化 支持 11 种语言

关键设计决策

  • 选择 Formily 作为表单引擎:支持 JSON Schema 驱动的动态表单渲染,与 NocoBase 的 Schema 驱动 UI 理念高度契合
  • Schema 驱动 UI:所有界面通过 JSON Schema 描述,既支持可视化配置,也支持代码级定制

3.3 AI 相关技术栈

技术/概念 说明
LLM 服务抽象层 支持 OpenAI、Claude、Azure OpenAI、本地模型等
AI Employee 框架 基于角色的 AI 代理系统
AI Skills 系统 工具调用(Function Calling)框架
知识库集成 RAG(检索增强生成)能力
AI Builder 自然语言驱动的应用构建

四、数据模型驱动机制

4.1 核心概念:Collection 与 Block 的解耦

这是 NocoBase 区别于 Airtable、Notion 等工具的根本设计:

yaml 复制代码
传统无代码平台 (Airtable/Notion):
┌─────────────────────────────┐
│        表格/数据库           │
│  ┌─────┬─────┬─────┬─────┐  │
│  │ 列1  │ 列2  │ 列3  │ 列4  │  │  ← UI 即数据结构
│  ├─────┼─────┼─────┼─────┤  │     添加列 = 添加字段
│  │ 数据 │ 数据 │ 数据 │ 数据 │  │
│  └─────┴─────┴─────┴─────┘  │
└─────────────────────────────┘

NocoBase (数据模型驱动):
┌─────────────────────────────┐
│      Collection (集合)       │
│  ┌───────────────────────┐  │
│  │  字段定义 (Fields)      │  │  ← 纯粹的数据结构
│  │  • name: string         │  │
│  │  • age: integer         │  │
│  │  • email: string        │  │
│  │  • department: relation │  │
│  └───────────────────────┘  │
└─────────────────────────────┘
           │
    ┌──────┼──────┬──────┐
    ▼      ▼      ▼      ▼
┌──────┐┌──────┐┌──────┐┌──────┐
│表格视图││表单视图││看板视图││日历视图│
│Block ││Block ││Block ││Block │
└──────┘└──────┘└──────┘└──────┘
   ↑      ↑      ↑      ↑
  同一个 Collection 的多种 UI 表现
  每个 Block 可独立配置字段、样式、操作

4.2 Collection 模型源码分析

@nocobase/database 包中,Collection 是核心抽象:

typescript 复制代码
// 伪代码示意 (基于源码结构)
class Collection {
  // 集合元数据
  name: string;           // 集合名称
  fields: Map<string, Field>;  // 字段集合
  options: CollectionOptions;  // 配置选项

  // 数据库模型 (Sequelize Model)
  model: Model;

  // 关系定义
  associations: Map<string, Association>;

  // 核心方法
  addField(name: string, options: FieldOptions): Field;
  removeField(name: string): void;
  setField(name: string, options: FieldOptions): Field;

  // 动态 DDL
  sync(): Promise<void>;  // 同步到数据库
  migrate(): Promise<void>; // 迁移处理
}

关键设计亮点

  1. 动态 DDL:NocoBase 支持在运行时动态创建、修改集合和字段,并自动同步到数据库
  2. 字段类型系统:内置 30+ 字段类型(字符串、数字、日期、关系、JSON、公式等),支持自定义字段类型
  3. 关系映射:完整支持一对一、一对多、多对多、自引用等关系

4.3 数据源管理器(Data Source Manager)

markdown 复制代码
┌─────────────────────────────────────────────┐
│           Data Source Manager                │
│  ┌─────────────┐  ┌───────────────────────┐  │
│  │ 数据源注册表 │  │  集合工厂 (Collection │  │
│  │             │  │  Factory)             │  │
│  └─────────────┘  └───────────────────────┘  │
└─────────────────────────────────────────────┘
           │
    ┌──────┼──────┬──────────┐
    ▼      ▼      ▼          ▼
┌──────┐┌──────┐┌──────┐  ┌──────────┐
│主数据库││外部  ││外部  │  │ 第三方   │
│Plugin││MySQL ││Oracle│  │ API 插件 │
└──────┘└──────┘└──────┘  └──────────┘

支持的数据源类型:

  • 主数据库:PostgreSQL、MySQL、SQLite、MariaDB
  • 外部数据库:MySQL、MariaDB、PostgreSQL、SQL Server、Oracle、KingbaseES
  • 第三方 API:通过插件集成 REST/GraphQL API
  • 文件数据源:Excel、CSV 等

4.4 ER 图可视化

NocoBase 提供了 ER 风格的可视化界面,用于:

  • 直观展示实体及其关系
  • 从业务需求中提取数据模型
  • 支持拖拽式建模

五、插件机制深度剖析

5.1 插件体系架构

NocoBase 的插件系统是其最核心的扩展机制,遵循**"一切皆插件"**的原则:

kotlin 复制代码
插件分类体系:
├─ 核心插件 (Core Plugins) --- 系统运行必需
│  ├─ @nocobase/plugin-users          用户管理
│  ├─ @nocobase/plugin-auth           认证授权
│  ├─ @nocobase/plugin-acl            权限控制
│  ├─ @nocobase/plugin-data-source-main 主数据源
│  ├─ @nocobase/plugin-collection-manager 集合管理
│  └─ @nocobase/plugin-ui-schema-storage UI Schema 存储
│
├─ 官方插件 (Official Plugins) --- 官方维护
│  ├─ @nocobase/plugin-workflow      工作流引擎
│  ├─ @nocobase/plugin-ai            AI 能力
│  ├─ @nocobase/plugin-data-visualization 数据可视化
│  ├─ @nocobase/plugin-calendar      日历视图
│  ├─ @nocobase/plugin-kanban        看板视图
│  ├─ @nocobase/plugin-gantt         甘特图
│  ├─ @nocobase/plugin-map           地图
│  ├─ @nocobase/plugin-file-manager  文件管理
│  └─ ... (100+ 官方插件)
│
└─ 第三方/自定义插件 (Custom Plugins)
   └─ 开发者自行开发的业务插件

5.2 插件生命周期

css 复制代码
插件生命周期状态机:

   ┌─────────┐
   │ 未注册   │
   └────┬────┘
        │ register()
        ▼
   ┌─────────┐     ┌─────────┐
   │ 已注册   │────▶│ 已安装   │
   │         │install│         │
   └────┬────┘     └────┬────┘
        │               │ load()
        │ activate()     ▼
        │          ┌─────────┐     ┌─────────┐
        └─────────▶│ 已加载   │────▶│ 已启用   │
                   │         │enable │  (运行中)│
                   └─────────┘     └────┬────┘
                                        │
                                   ┌────┴────┐
                                   │ disable │
                                   │ unload  │
                                   └─────────┘

关键生命周期钩子

钩子 触发时机 用途
beforeLoad 插件加载前 注册依赖、初始化配置
load 插件加载时 注册路由、模型、中间件
afterLoad 插件加载后 数据初始化、关联建立
beforeEnable 插件启用前 前置检查
afterEnable 插件启用后 启动定时任务、订阅事件
beforeDisable 插件禁用前 清理资源
afterDisable 插件禁用后 停止服务
beforeRemove 插件卸载前 数据备份
afterRemove 插件卸载后 清理数据

5.3 插件开发模型

一个典型的 NocoBase 插件包含:

scala 复制代码
my-plugin/
├── package.json          # 插件元数据、依赖声明
├── server.ts             # 服务端入口
│   └── class MyPlugin extends Plugin {
│         async load() {
│           // 注册 API 路由
│           this.router.get('/api/my-plugin/hello', ...);
│           
│           // 注册集合
│           this.db.collection({
│             name: 'myCollection',
│             fields: [...]
│           });
│           
│           // 注册中间件
│           this.app.use(middleware);
│         }
│       }
├── client.ts             # 客户端入口
│   └── class MyPluginClient extends Plugin {
│         async load() {
│           // 注册区块
│           this.blockManager.addBlock('myBlock', MyBlock);
│           
│           // 注册操作
│           this.actionManager.addAction('myAction', MyAction);
│           
│           // 注册字段类型
│           this.fieldManager.addField('myField', MyField);
│         }
│       }
└── README.md

5.4 插件间通信机制

NocoBase 提供了多种插件间协作方式:

  1. 事件总线(Event Bus):基于发布-订阅模式

    typescript 复制代码
    // 插件 A 发布事件
    this.app.emit('myEvent', data);
    
    // 插件 B 监听事件
    this.app.on('myEvent', handler);
  2. 服务注册表(Service Registry):共享服务实例

    typescript 复制代码
    // 注册服务
    this.app.service('myService', new MyService());
    
    // 使用服务
    const service = this.app.service('myService');
  3. 依赖注入:通过声明式依赖确保加载顺序

    json 复制代码
    {
      "dependencies": ["@nocobase/plugin-users", "@nocobase/plugin-auth"]
    }

5.5 与 WordPress 插件机制的对比

维度 NocoBase WordPress
架构 微内核 + 插件 单体 + 钩子
技术栈 Node.js + React + TypeScript PHP
前后端 统一插件包,含 server/client 后端为主
安装方式 npm 包 / 上传 / 市场 上传 / 市场
扩展点 区块、操作、字段、API、数据源 钩子、过滤器、短代码
类型安全 TypeScript 类型安全 动态类型
AI 集成 原生支持 AI 插件开发 需第三方插件

六、AI 能力体系

6.1 AI 架构总览

NocoBase 的 AI 能力不是简单的"聊天机器人"外挂,而是**深度嵌入业务系统的 AI 员工(AI Employee)**体系:

scss 复制代码
┌─────────────────────────────────────────────────────────────┐
│                    AI 能力架构                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌───────────────┐  ┌───────────────┐  ┌───────────────┐  │
│  │  AI Builder   │  │  AI Employee  │  │ AI Plugin Dev │  │
│  │  (应用构建)    │  │  (业务协作)    │  │ (插件开发)    │  │
│  │               │  │               │  │               │  │
│  │ • 自然语言建模 │  │ • 多角色代理  │  │ • 脚手架生成  │  │
│  │ • 页面生成    │  │ • 工具调用    │  │ • 代码补全    │  │
│  │ • 工作流生成  │  │ • 知识库 RAG  │  │ • 逻辑生成    │  │
│  │ • 权限配置    │  │ • 人机协作    │  │ • 调试辅助    │  │
│  └───────┬───────┘  └───────┬───────┘  └───────┬───────┘  │
│          │                  │                  │          │
│          └──────────────────┼──────────────────┘          │
│                             ▼                             │
│                  ┌─────────────────────┐                  │
│                  │   LLM 服务抽象层   │                  │
│                  │  (LLM Service Layer)│                  │
│                  │                     │                  │
│                  │ • OpenAI GPT-4/4o   │                  │
│                  │ • Claude 3/4        │                  │
│                  │ • Azure OpenAI      │                  │
│                  │ • 本地模型 (Ollama)  │                  │
│                  │ • 自定义 API        │                  │
│                  └─────────────────────┘                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

6.2 AI Employee(AI 员工)

AI Employee 是 NocoBase 最具特色的 AI 能力,将 AI 定义为具有特定角色和职责的虚拟员工

6.2.1 内置 AI 员工角色

角色 职责 应用场景
Analyst(分析师) 数据分析与可视化 生成图表、数据洞察、趋势分析
Researcher(研究员) 知识库检索与总结 文档问答、信息检索、报告生成
Translator(翻译员) 多语言翻译 内容本地化、实时翻译
Assistant(助手) 通用任务处理 数据录入、流程辅助、通知提醒

6.2.2 AI Employee 配置模型

每个 AI Employee 包含以下配置维度:

yaml 复制代码
AI Employee 配置结构:
  profile:          # 基础档案
    username:       # 唯一标识
    nickname:       # 显示名称
    position:       # 职位描述
    avatar:         # 头像
    bio:            # 简介
    greeting:       # 问候语

  role_setting:     # 角色设定
    system_prompt:    # 系统提示词(定义身份、目标、边界)
    variables:      # 动态变量(当前用户、角色、语言、时间)

  model_settings:   # 模型配置
    enabled:        # 是否启用专属模型
    models:         # 允许使用的模型列表

  skills:           # 技能与工具
    tools:          # 可用工具权限
    knowledge_base: # 关联知识库

  permissions:      # 权限控制
    collections:    # 可访问的数据集合
    actions:        # 可执行的操作

6.2.3 AI Employee 的工作模式

javascript 复制代码
AI Employee 工作流:

用户请求
    │
    ▼
┌─────────────────┐
│ 意图识别与路由   │  ← 根据角色定位理解需求
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
┌───────┐ ┌───────────┐
│直接回答│ │ 工具调用   │
│(闲聊) │ │ (Function │
└───────┘ │  Calling) │
          └─────┬─────┘
                │
        ┌───────┼───────┐
        ▼       ▼       ▼
    ┌──────┐┌──────┐┌──────┐
    │查询  ││更新  ││执行  │
    │数据  ││数据  ││工作流│
    └──────┘└──────┘└──────┘
                │
                ▼
        ┌───────────────┐
        │ 结果生成与返回  │
        │ (结合业务上下文) │
        └───────────────┘

6.3 AI Skills(AI 技能)

AI Skills 是 AI Employee 可调用的工具集,基于 Function Calling 机制:

typescript 复制代码
// Skill 定义示例
const dataQuerySkill = {
  name: 'query_collection',
  description: '查询指定集合的数据',
  parameters: {
    type: 'object',
    properties: {
      collection: { type: 'string', description: '集合名称' },
      filter: { type: 'object', description: '过滤条件' },
      sort: { type: 'array', description: '排序规则' },
      page: { type: 'number', description: '页码' }
    },
    required: ['collection']
  },
  handler: async (params) => {
    // 执行数据库查询
    return await db.collection(params.collection).find(params);
  }
};

内置 Skills 包括:

  • 数据查询:查询、聚合、统计
  • 数据操作:创建、更新、删除记录
  • 工作流触发:启动工作流实例
  • 文件处理:上传、下载、解析
  • 通知发送:邮件、短信、站内信
  • 知识库检索:RAG 检索增强

6.4 AI Builder(AI 构建器)

AI Builder 允许用户通过自然语言描述来构建应用:

arduino 复制代码
用户输入: "创建一个 CRM 系统,包含客户、联系人、商机三个模块,
           客户和联系人是多对多关系,商机关联到客户"

AI Builder 处理流程:
├─ 1. 需求解析 → 提取实体、关系、字段
├─ 2. 数据建模 → 生成 Collection 定义
├─ 3. 界面生成 → 创建默认页面和区块
├─ 4. 权限配置 → 设置基础 RBAC
├─ 5. 工作流建议 → 推荐自动化流程
└─ 6. 人工确认 → 用户在 WYSIWYG 界面微调

关键设计:AI 生成的不是黑盒代码,而是 NocoBase 原生的配置(Collection、Schema、Workflow),用户可以随时在可视化界面中修改。

6.5 AI Plugin Development(AI 辅助插件开发)

NocoBase 支持使用 AI 辅助开发自定义插件:

markdown 复制代码
AI 插件开发流程:
1. 自然语言描述插件需求
2. AI 生成插件脚手架 (package.json, server.ts, client.ts)
3. AI 生成组件代码 (React 组件、API 处理器)
4. AI 生成业务逻辑 (数据库操作、工作流节点)
5. 开发者在 NocoBase 中测试和调试
6. 迭代优化

6.6 与主流 AI 编码工具的集成

NocoBase 支持与主流 AI 编码代理协同工作:

AI 工具 集成方式 能力
Claude Code CLI + MCP 端到端开发、迁移、发布
Cursor IDE 插件 代码编辑、重构、调试
GitHub Copilot IDE 扩展 代码补全、生成
OpenCode CLI 自动化开发任务
TRAE 集成 项目构建

设计哲学 :AI 不是替代开发者,而是作为协作者------AI 处理重复性工作(脚手架、样板代码),人类专注于业务逻辑和体验优化。


七、前后端运作机制

7.1 服务端请求生命周期

bash 复制代码
HTTP 请求处理流程:

Request
  │
  ▼
┌─────────────────┐
│ Koa 中间件栈    │
│ • 日志记录      │
│ • 请求解析      │
│ • CORS 处理     │
│ • 认证校验      │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 路由匹配与分发   │
│ (Router)        │
│ • REST API 路由 │
│ • 插件自定义路由 │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ ACL 权限检查    │
│ (Access Control)│
│ • 角色权限      │
│ • 字段权限      │
│ • 数据权限      │
│ • 操作权限      │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 资源操作处理    │
│ (Resourcer)     │
│ • list/create/  │
│   update/destroy│
│ • 关联操作      │
│ • 自定义操作    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 数据库执行      │
│ (Sequelize)     │
│ • 查询构建      │
│ • 事务管理      │
│ • 钩子触发      │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 响应序列化      │
│ • 字段过滤      │
│ • 关联展开      │
│ • 格式转换      │
└────────┬────────┘
         │
         ▼
      Response

7.2 客户端渲染机制

7.2.1 Schema 驱动 UI 系统

NocoBase 的 UI 完全由 JSON Schema 驱动:

typescript 复制代码
// 页面 Schema 示例
const pageSchema = {
  type: 'page',
  title: '客户管理',
  properties: {
    // 表格区块
    customerTable: {
      type: 'block',
      'x-component': 'TableBlock',
      'x-collection': 'customers',
      properties: {
        // 列定义
        name: {
          type: 'string',
          title: '客户名称',
          'x-component': 'Input'
        },
        status: {
          type: 'string',
          title: '状态',
          'x-component': 'Select'
        }
      }
    },
    // 表单区块
    customerForm: {
      type: 'block',
      'x-component': 'FormBlock',
      'x-collection': 'customers',
      // ...
    }
  }
};

7.2.2 数据提供者体系(Data Providers)

arduino 复制代码
数据流架构:

┌─────────────────────────────────────────────┐
│              Application                    │
│         (全局状态 + 路由)                    │
└───────────────────┬─────────────────────────┘
                    │
    ┌───────────────┼───────────────┐
    ▼               ▼               ▼
┌──────────┐  ┌──────────┐  ┌──────────┐
│Collection│  │  Block   │  │  Record  │
│Provider  │  │ Provider │  │ Provider │
│          │  │          │  │          │
│• 数据模型│  │• 区块数据│  │• 单条记录│
│• 字段定义│  │• 筛选条件│  │• 表单状态│
│• 关系配置│  │• 排序分页│  │• 验证规则│
└────┬─────┘  └────┬─────┘  └────┬─────┘
     │             │             │
     └─────────────┼─────────────┘
                   ▼
            ┌──────────┐
            │ API Client│
            │           │
            │• 请求封装 │
            │• 缓存策略 │
            │• 错误处理 │
            └────┬─────┘
                 │
                 ▼
            REST API

7.2.3 区块(Block)系统

区块是 NocoBase UI 的基本构建单元:

区块类型 用途 数据源
Table Block 表格展示 Collection 列表
Form Block 表单编辑 单条记录
Detail Block 详情展示 单条记录
Kanban Block 看板视图 Collection + 分组字段
Calendar Block 日历视图 Collection + 日期字段
Chart Block 图表可视化 Collection + 聚合
Gantt Block 甘特图 Collection + 时间字段
Map Block 地图展示 Collection + 地理字段
Markdown Block 富文本 静态内容
Custom Block 自定义 任意

7.3 工作流引擎(Workflow Engine)

sql 复制代码
工作流架构:

触发器 (Trigger)
    │
    ▼
┌─────────────────┐
│ 事件监听        │
│ • 数据变更      │
│ • 定时任务      │
│ • Webhook     │
│ • 手动触发      │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 节点执行引擎    │
│                 │
│ ┌─────────────┐ │
│ │ 条件节点     │ │ ← 分支判断
│ │ (Condition) │ │
│ └─────────────┘ │
│ ┌─────────────┐ │
│ │ 计算节点     │ │ ← 公式计算
│ │ (Calculation)│ │
│ └─────────────┘ │
│ ┌─────────────┐ │
│ │ 更新节点     │ │ ← 数据操作
│ │ (Update)    │ │
│ └─────────────┘ │
│ ┌─────────────┐ │
│ │ 审批节点     │ │ ← 人工审批
│ │ (Approval)  │ │
│ └─────────────┘ │
│ ┌─────────────┐ │
│ │ AI 节点      │ │ ← AI 处理
│ │ (AI Employee)│ │
│ └─────────────┘ │
│ ┌─────────────┐ │
│ │ HTTP 节点    │ │ ← 外部调用
│ │ (Request)   │ │
│ └─────────────┘ │
└─────────────────┘
         │
         ▼
    执行完成 / 错误处理

八、核心源码目录结构

8.1 Monorepo 结构

bash 复制代码
nocobase/
├── packages/
│   ├── core/                          # 核心包
│   │   ├── app/                       # 应用启动器
│   │   ├── server/                    # 服务端框架
│   │   │   ├── src/
│   │   │   │   ├── application/       # 应用实例
│   │   │   │   ├── plugin/            # 插件基类与管理
│   │   │   │   ├── router/            # 路由系统
│   │   │   │   ├── middleware/        # 中间件
│   │   │   │   └── resourcer/         # 资源操作抽象
│   │   │   └── package.json
│   │   ├── client/                    # 客户端框架
│   │   │   ├── src/
│   │   │   │   ├── application/       # 客户端应用
│   │   │   │   ├── block-provider/    # 区块数据提供者
│   │   │   │   ├── collection-manager/ # 集合管理
│   │   │   │   ├── schema-component/  # Schema 组件系统
│   │   │   │   ├── schema-initializer/ # Schema 初始化器
│   │   │   │   ├── schema-settings/   # Schema 设置器
│   │   │   │   └── api-client/        # API 客户端
│   │   │   └── package.json
│   │   ├── database/                  # 数据库抽象层
│   │   │   ├── src/
│   │   │   │   ├── collection/        # 集合模型
│   │   │   │   ├── field/             # 字段类型
│   │   │   │   ├── model/             # Sequelize 模型封装
│   │   │   │   ├── relation/          # 关系处理
│   │   │   │   └── migration/         # 迁移管理
│   │   │   └── package.json
│   │   ├── test/                      # 测试工具
│   │   ├── sdk/                       # SDK
│   │   └── cli/                       # 命令行工具
│   │
│   ├── plugins/                       # 插件目录
│   │   ├── @nocobase/plugin-users     # 用户管理
│   │   ├── @nocobase/plugin-auth      # 认证
│   │   ├── @nocobase/plugin-acl       # 权限控制
│   │   ├── @nocobase/plugin-workflow  # 工作流
│   │   ├── @nocobase/plugin-ai        # AI 能力
│   │   ├── @nocobase/plugin-ai-knowledge-base  # 知识库
│   │   ├── @nocobase/plugin-data-visualization # 数据可视化
│   │   ├── @nocobase/plugin-calendar  # 日历
│   │   ├── @nocobase/plugin-kanban    # 看板
│   │   ├── @nocobase/plugin-gantt     # 甘特图
│   │   ├── @nocobase/plugin-map       # 地图
│   │   ├── @nocobase/plugin-file-manager      # 文件管理
│   │   ├── @nocobase/plugin-data-source-main  # 主数据源
│   │   ├── @nocobase/plugin-data-source-manager # 数据源管理
│   │   ├── @nocobase/plugin-ui-schema-storage  # UI Schema 存储
│   │   └── ... (100+ 插件)
│   │
│   └── presets/                       # 预设配置
│
├── storage/                           # 存储目录
├── docker/                            # Docker 配置
├── scripts/                           # 构建脚本
├── examples/                          # 示例代码
└── package.json                       # 根配置

8.2 关键源码文件分析

8.2.1 服务端应用入口

typescript 复制代码
// packages/core/server/src/application.ts (简化示意)

class Application {
  // 核心属性
  db: Database;                    // 数据库实例
  pm: PluginManager;               // 插件管理器
  router: Router;                    // 路由
  resourcer: Resourcer;             // 资源管理器
  acl: ACL;                         // 权限控制

  // 生命周期
  async load() {
    // 1. 加载配置
    // 2. 初始化数据库
    // 3. 加载核心插件
    // 4. 加载用户插件
    // 5. 启动 HTTP 服务
  }

  async start() {
    await this.db.sync();           // 同步数据库
    await this.pm.load();            // 加载插件
    await this.listen();             // 启动监听
  }
}

8.2.2 插件基类

typescript 复制代码
// packages/core/server/src/plugin.ts (简化示意)

abstract class Plugin {
  // 插件元数据
  name: string;
  version: string;
  dependencies: string[];

  // 应用上下文
  app: Application;
  db: Database;
  router: Router;

  // 生命周期钩子
  async beforeLoad() {}
  async load() {}
  async afterLoad() {}
  async beforeEnable() {}
  async afterEnable() {}
  async beforeDisable() {}
  async afterDisable() {}

  // 工具方法
  log(message: string) {}
  t(key: string) {}  // 国际化
}

8.2.3 数据库 Collection 模型

typescript 复制代码
// packages/core/database/src/collection.ts (简化示意)

class Collection {
  name: string;
  options: CollectionOptions;
  fields: Map<string, Field> = new Map();
  model: Model;  // Sequelize Model

  constructor(options: CollectionOptions) {
    this.name = options.name;
    this.options = options;
    this.model = this.createModel();
  }

  addField(name: string, options: FieldOptions): Field {
    const field = new Field(name, options, this);
    this.fields.set(name, field);
    field.bind();  // 绑定到 Sequelize Model
    return field;
  }

  removeField(name: string): void {
    const field = this.fields.get(name);
    if (field) {
      field.unbind();
      this.fields.delete(name);
    }
  }

  sync(): Promise<void> {
    // 同步到数据库 (动态 DDL)
    return this.model.sync({ alter: true });
  }
}

九、总结与对比

9.1 NocoBase 的核心优势

优势 说明
真正的开源 AGPL-3.0 协议,核心代码完全开源,无供应商锁定
数据主权 数据存储在自己的数据库中,支持私有化部署
扩展性 插件微内核架构,理论上无限扩展
AI 原生 AI 不是外挂,而是系统设计的核心组成部分
生产就绪 数据模型、权限、工作流等基础设施经过生产验证
轻量级 可在普通服务器上运行,单人可维护
定价透明 买断制,无订阅、无按用户/应用/数据量收费

9.2 与同类产品的对比

维度 NocoBase Airtable Notion OutSystems Budibase
开源 ✅ AGPL ✅ GPL
自托管 ⚠️ 企业版
数据模型驱动 ⚠️ ⚠️
插件扩展 ✅ 微内核 ⚠️ ⚠️ ⚠️
AI 集成 ✅ 深度 ⚠️ ⚠️
工作流引擎 ✅ 内置 ⚠️ ⚠️
多数据源 ⚠️ ⚠️
技术栈 Node+React 闭源 闭源 .NET Node+Svelte
目标用户 开发者+业务 业务用户 业务用户 企业 IT 开发者

9.3 适用场景

非常适合

  • 需要构建复杂业务系统的技术团队
  • 有数据主权和合规要求的组织
  • 需要多应用、多工作空间的企业
  • 希望将 AI 深度集成到业务流程中的团队
  • 需要长期维护和持续迭代的内部系统

不太适合

  • 追求极致简单、即开即用的个人用户
  • 重度依赖第三方 SaaS 集成的场景
  • 没有技术资源进行自托管和维护的团队

参考资源

相关推荐
UXbot2 天前
帮助企业低门槛开展AI应用开发的平台推荐
前端·低代码·ui·交互·产品经理·原型模式·web app
盟接之桥2 天前
电子数据交换(EDI)|制造业汽车零配件场景方案
大数据·网络·人工智能·安全·低代码·汽车·制造
UXbot3 天前
如何选择适合公司项目的UI设计工具?企业选型指南
前端·低代码·ui·团队开发·原型模式·设计规范·web app
UXbot3 天前
原型设计工具如何帮助新人快速进入产品行业?
前端·低代码·ui·交互·团队开发·原型模式·web app
NocoBase3 天前
程序员和软件还有前途吗 —— 从 NocoBase 收入再翻倍谈起
低代码·ai·开源·无代码·管理工具·内部工具·无代码开发平台
盟接之桥3 天前
制造业汽车零配件EDI软件场景方案
网络·安全·低代码·汽车·制造
小龙报3 天前
用ChatGPT 5.5构建个人写作工作流:从大纲、初稿到风格润色的提示词链
人工智能·神经网络·低代码·自然语言处理·chatgpt·gpt-3·知识图谱
撑死胆大的4 天前
2026开发变局:国标落地后,软件开发彻底换赛道
前端·低代码·ai·大模型
API开发平台5 天前
API智能开发与治理平台v5.0发布
低代码·ai编程