v1 到 v2 客户端迁移指南
本文介绍如何将工作流扩展插件的客户端代码从 v1 迁移到 v2。v2 客户端的核心变化是将配置界面从 Formily Schema 声明式改为 Loader + 纯 React/antd 组件方式。
概述
主要变化
- 导入路径变更:
@nocobase/plugin-workflow/client→@nocobase/plugin-workflow/client-v2,插件基类@nocobase/client→@nocobase/client-v2 - 配置界面模式变更:从 Formily Schema 对象(
fieldset)改为 Loader 懒加载的 React 组件(FieldsetLoader) scope/components属性移除:不再需要向 Schema 注入作用域对象或组件,直接在 React 组件中 import 使用即可
导入路径对照
通用规则
Loader 模式
v2 使用 LoaderOf 类型的属性替代 v1 的 fieldset 等 Formily Schema 对象。Loader 本质是一个返回 Promise<{ default: ComponentType }> 的函数,通过动态 import() 实现代码分割和懒加载:
如果需要指向文件中的命名导出(而非默认导出),使用 .then() 重映射:
配置组件写法
Loader 加载的组件是标准的 React 函数组件,使用 antd 的 Form.Item 构建表单,字段路径统一使用 ['config', '字段名'] 的嵌套数组格式:
触发器迁移
属性对照表
迁移示例
v1 写法:
v2 写法:
插件注册方式
节点迁移
属性对照表
迁移示例
v1 写法:
v2 写法:
其他注意事项
保持不变的部分
以下属性和方法在 v1 和 v2 中签名基本一致,迁移时可以直接保留:
useVariables(node/config, options)— 提供变量选项useScopeVariables(node, options)— 提供分支局域变量isAvailable(ctx)— 节点可用性判断(v2 的NodeAvailableContext新增了engine属性)
v2 新增的属性
getCreateModelMenuItem— 定义节点/触发器在 v2 画布上创建子模型菜单项时的配置useTempAssociationSource— 提供临时关联数据源信息validate(config)— 触发器配置校验(仅触发器)branching— 声明节点是否为分支节点(仅节点)end— 声明节点是否为终止节点(仅节点)testable— 声明节点是否支持测试运行(仅节点)
值语义一致性
迁移时务必确保 v2 组件产生的表单值与 v1 一致,尤其是手动执行时的 payload 形状。例如,如果 v1 的手动执行表单存储完整记录对象,v2 也必须保持相同的值结构,而不能只存储主键。

