# @bpmn-io/variable-resolver 中文文档

规范地址：https://npmcn.com/package/%40bpmn-io/variable-resolver/

版本：3\.3\.1
npm 元数据更新时间：2026-10-23T14:49:14.110Z
中文译文更新时间：2026-11-08T13:08:39.831Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bpmn-io/variable-resolver
原文对照：https://npmcn.com/package/%40bpmn-io/variable-resolver/?lang=original
项目主页：https://github.com/bpmn-io/variable-resolver#readme
源码仓库：https://github.com/bpmn-io/variable-resolver

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：77.7 kB，15 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：6 个
- peer 依赖：bpmn-js \*
- 首次发布：2023-02-21T15:40:21.308Z
- 最新版本发布：2026-10-23T14:49:13.866Z
- 近 30 天下载量：49866（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：33（近 12 个月 16 个）

## 中文简介

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

## 安装

```sh
npm install @bpmn-io/variable-resolver
```

也可以使用：`pnpm add @bpmn-io/variable-resolver`、`yarn add @bpmn-io/variable-resolver`、`bun add @bpmn-io/variable-resolver`

## README

# @bpmn-io/可变反应器

[![CI](https://github.com/bpmn-io/variable-resolver/actions/workflows/CI.yml/badge.svg)](https://github.com/bpmn-io/variable-resolver/actions/workflows/CI.yml)

扩展名 [日记](https://github.com/bpmn-io/bpmn-js) 使图表的数据模型可供其他组件使用.

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

## 使用量

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

```javascript
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` 服务 :

```javascript
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)` 支持五个过滤开关:

| 选项 | 默认 | 说明 |
| --- | --- | --- |
| `read` | `true` | 包含被询问元素所消耗的变量 |
| `written` | `true` | 包含被询问元素写入/创建的变量 |
| `local` | `true` | 包含本地变量到被询问元素范围 |
| `external` | `true` | 包含被询问元素范围以外的变量 |
| `outputMappings` | `true` | 计算输出映射为已读 |

### 添加可变提取器

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

```javascript
// 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`数字 :

```javascript
/**
 * 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`数字 :

```javascript
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' ]
 *    }
 *  ]
 * }
 */
```

## 发展

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

```sh
npm install
```

然后,以下列例子起首:

```sh
npm start
```

## 许可证

麻省理工学院

## 常见问题

### @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 和提交记录判断。

