@bpmn-io/variable-resolver

中文文档
3.3.1发布于 2026/10/23MITCommonJS近 30 天下载 5万

bpmn-js 处理外部变量提供者的插件

中文使用文档
文档目录6 节
  1. 使用量
  2. 获取变量
  3. 添加可变提取器
  4. 高级使用大小写
  5. 发展
  6. 许可证

@bpmn-io/可变反应器

CI

扩展名 日记 使图表的数据模型可供其他组件使用.

[注] 截至版本 v3 此库既会显示书面变量, 也会显示所消耗的变量, 您可以通过选项过滤它们 .

使用量

要将变量解析器添加到您的应用程序中, 请添加到您的 bpmn- js 配置中 :

import BpmnModeler from 'bpmn-js/lib/Modeler';
import ZeebeModdle from 'zeebe-bpmn-moddle/resources/zeebe.json';

import {
  ZeebeVariableResolverModule,     // For Camunda 8 diagrams
  // CamundaVariableResolverModule // for Camunda 7 diagrams
} from '@bpmn-io/variable-resolver';

const modeler = new BpmnModeler({
  container: '#canvas',
  additionalModules: [
    ZeebeVariableResolverModule
  ],
  moddleExtensions = {
    zeebe: ZeebeModdle
  }
});

获取变量

使用 variableResolver 服务 :

const variableResolver = modeler.get('variableResolver');
const elementRegistry = modeler.get('elementRegistry');

// retrieve variables relevant to an element
const task = elementRegistry.get('Task_1');

// default: variables relevant to <task> in its visible scopes
await variableResolver.getVariablesForElement(task);

// variables read by <task> only
await variableResolver.getVariablesForElement(task, {
  read: true,
  written: false
});

// all variables written by <task>
await variableResolver.getVariablesForElement(task, { written: true, read: false });

// local variables only (scope === queried element)
await variableResolver.getVariablesForElement(task, {
  local: true,
  external: false
});

// non-local variables only (scope !== queried element)
await variableResolver.getVariablesForElement(task, {
  local: false,
  external: true
});

// retrieve all variables defined in a process
const processElement = elementRegistry.get('Process_1');

// returns all variables for the process (unfiltered), for local processing
await variableResolver.getProcessVariables(processElement);

getVariablesForElement(element, options) 支持五个过滤开关:

选项默认说明
readtrue包含被询问元素所消耗的变量
writtentrue包含被询问元素写入/创建的变量
localtrue包含本地变量到被询问元素范围
externaltrue包含被询问元素范围以外的变量
outputMappingstrue计算输出映射为已读

添加可变提取器

要添加自己的变量,请扩展 variableProvider 课在您的扩展。 它只需要执行 getVariables 方法,它以一个元素为参数,并返回要添加到元素范围的变量。 该函数可以是同步的.

// MyExtension.js
import VariableProvider from '@bpmn-io/variable-resolver/lib/VariableProvider';

class MyCustomProvider extends VariableProvider {
  getVariables(element) {
    const variables = [
      {
        name: 'myVariable',
        type: 'String',
        info: 'This is a global variable'
      }
    ];
      if (is(element, 'bpmn:Process')) {
      return variables;
    }
  }
}

export const MyExtension = {
  __init__: [
    'myCustomProvider',
  ],
  myCustomProvider: [ 'type', MyCustomProvider ],
};

高级使用大小写

默认, getVariablesForElement 财务报告和审定财务报表 getProcessVariables 将同名和同范围的变量合并成一个——条目结构和类型在合并代表中混合.

合并变量额外曝光 variants,每个写入元素一个。 每一个变体的形状都像一个变量,只描述其单子贡献的价值 origin数字 :

/**
 * variable = {
 *   name: 'myVariable',
 *   type: 'Number|String',
 *   origin: [ 'Task_1', 'Task_2' ],
 *   variants: [
 *     { name: 'myVariable', type: 'String', origin: [ 'Task_1' ], ... },
 *     { name: 'myVariable', type: 'Number', origin: [ 'Task_2' ], ... }
 *   ],
 *   ...
 * }
 */

在某些情况下,您可能想要访问原始数据,例如运行 Lint 规则以检测提供者之间潜在的计划不匹配. 你用这个就可以了 getRawVariables数字 :

const variableResolver = modeler.get('variableResolver');

const raw = await variableResolver.getRawVariables();

/**
 * raw = {
 *  'Process_1': [
 *    {
 *     name: 'myVariable',
 *     type: 'String',
 *     scope: 'Process_1',
 *     origin: [ 'Task_1' ]
 *    },
 *    {
 *     name: 'myVariable',
 *     type: 'Number',  // Same Variable with different types
 *     scope: 'Process_1',
 *     origin: [ 'Task_2' ]
 *    }
 *  ]
 * }
 */

发展

通过安装所有依赖来准备工程 :

npm install

然后,以下列例子起首:

npm start

许可证

麻省理工学院

版本与发布记录

@bpmn-io/variable-resolver 共发布 33 个版本,首次发布于 2023/02/21;过去 12 个月发布了 16 个版本。

版本发布日期距今
3.3.1latest2026/10/2315 天前
3.3.02026/07/213 个月前
3.2.02026/07/014 个月前
3.1.02026/06/304 个月前
3.0.12026/04/246 个月前
3.0.02026/03/237 个月前

关于 @bpmn-io/variable-resolver 的常见问题

@bpmn-io/variable-resolver 是什么?

bpmn-js 处理外部变量提供者的插件

如何安装 @bpmn-io/variable-resolver?

在项目目录运行 npm install @bpmn-io/variable-resolver,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:bpmn-js(*)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bpmn-io/variable-resolver 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bpmn-io__variable-resolver 是否存在。

@bpmn-io/variable-resolver 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bpmn-io/variable-resolver 可以商用吗?

@bpmn-io/variable-resolver 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bpmn-io/variable-resolver 的下载量有多少?

根据 npm 官方下载统计,@bpmn-io/variable-resolver 在 2026/10/09 – 2026/11/07 这 30 天内被下载 49,866 次,日均约 1,662 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bpmn-io/variable-resolver 还在维护吗?

最新版本 3.3.1 发布于 2026/10/23(15 天前);至今共发布 33 个版本,其中过去 12 个月发布了 16 个;首次发布于 2023/02/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。