# @bpmn-io/feel-analyzer 中文文档

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

版本：0\.5\.1
npm 元数据更新时间：2026-09-08T13:24:16.210Z
中文译文更新时间：2026-11-08T13:05:46.505Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：67.1 kB，21 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>= 20
- 运行依赖：2 个
- 首次发布：2026-02-18T20:15:45.101Z
- 最新版本发布：2026-09-08T13:24:16.015Z
- 近 30 天下载量：306931（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：8（近 12 个月 8 个）

## 中文简介

静态感觉表达式分析器

## 安装

```sh
npm install @bpmn-io/feel-analyzer
```

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

## README

# 感觉分析器

> 用于分析感觉的库(亲切的表达语言)表达式.

[![CI](https://github.com/bpmn-io/feel-analyzer/workflows/CI/badge.svg)](https://github.com/bpmn-io/feel-analyzer/actions?query=workflow%3ACI)

## 安装

```bash
npm install @bpmn-io/feel-analyzer
```

## 使用量

要开始,请创建 `FeelAnalyzer` 实例:

```javascript
import { FeelAnalyzer } from '@bpmn-io/feel-analyzer';

const analyzer = new FeelAnalyzer();
```

分析用于提取输入变量的感觉表达式 :

```javascript
const result = analyzer.analyzeExpression('x + y');

console.log(result.valid); // true
console.log(result.inputs);
// [
//   { name: 'x' },
//   { name: 'y' }
// ]
```

配置感官方言( 表达式或无函数测试) :

```javascript
const analyzer = new FeelAnalyzer({
  dialect: 'unaryTests' // defaults to 'expression'
});
```

### 建筑

你可以提供 `builtins` 财务报告和审定财务报表 `reservedNameBuiltins` 将内置名称排除在输入检测之外。 使用 [`@camunda/feel-builtins`](https://github.com/camunda/feel-builtins) 提供这些:

```javascript
import { FeelAnalyzer } from '@bpmn-io/feel-analyzer';
import { builtins, reservedNameBuiltins } from '@camunda/feel-builtins';

const analyzer = new FeelAnalyzer({
  dialect: 'expression',
  parserDialect: 'camunda',
  builtins,
  reservedNameBuiltins
});

const result = analyzer.analyzeExpression('sum(orders.amount) > 100');

console.log(result.inputs);
// [
//   {
//     name: 'orders',
//     type: 'List',
//     entries: [
//       { name: 'amount' }
//     ]
//   }
// ]
```

### 输入变量

分析器会取出带有类型信息的输入变量,包括嵌入结构. 数据模型与 [变量解析器](https://github.com/bpmn-io/variable-resolver)数字 :

```javascript
const result = analyzer.analyzeExpression('person.name = "John" and scores[1] > 10');

console.log(result.inputs);
// [
//   {
//     name: 'person',
//     type: 'Context',
//     entries: [
//       { name: 'name' }
//     ]
//   },
//   {
//     name: 'scores',
//     type: 'List'
//   }
// ]
```

### 启动函数

分析器从表达式中提取出所有函数引用,按名称排序并被去重复. 每个功能被归类为: `builtin` 或者说 `user` 根据所提供的 `builtins` 列表 :

```javascript
import { FeelAnalyzer } from '@bpmn-io/feel-analyzer';
import { camundaBuiltins, camundaReservedNameBuiltins } from '@camunda/feel-builtins';

const analyzer = new FeelAnalyzer({
  parserDialect: 'camunda',
  builtins: camundaBuiltins,
  reservedNameBuiltins: camundaReservedNameBuiltins
});

const result = analyzer.analyzeExpression('from json(sum(myHelper(x)))');

console.log(result.functions);
// [
//   { name: 'from json', type: 'builtin' },
//   { name: 'myHelper', type: 'user' },
//   { name: 'sum', type: 'builtin' }
// ]
```

### 分析已铺设的树

如果您已经拥有一个解析语法树—— 例如来自使用相同解析器的 CodeMirror 编辑器—— 您可以直接用它进行分析 `analyzeTree`,避免重复分析:

```javascript
const analyzer = new FeelAnalyzer();

const expression = 'x + y';
const tree = analyzer.parser.parse(expression);

const result = analyzer.analyzeTree(tree, expression);
```

树必须来自与分析器一致配置的剖析器( 相同) `dialect`, (中文(简体) ), `parserDialect`,以及 `reservedNameBuiltins`——如规定 `analyzer.parser`。用不同的配置解析的树可能会产生不正确的结果.

## 相关

-   [@bpmn-io/lezer-feel (英语)](https://github.com/bpmn-io/lezer-feel) - 感觉语言定义 [勒泽](https://lezer.codemirror.net/) 解析器系统

## 许可证

麻省理工学院

## 常见问题

### @bpmn-io/feel-analyzer 是什么？

静态感觉表达式分析器

### 如何安装 @bpmn-io/feel-analyzer？

在项目目录运行 npm install @bpmn-io/feel-analyzer，或使用 pnpm add / yarn add / bun add。

### @bpmn-io/feel-analyzer 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @bpmn-io/feel-analyzer 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @bpmn-io/feel-analyzer 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 20。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @bpmn-io/feel-analyzer 可以商用吗？

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

### @bpmn-io/feel-analyzer 的下载量有多少？

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

### @bpmn-io/feel-analyzer 还在维护吗？

最新版本 0\.5\.1 发布于 2026/09/08（2 个月前）；至今共发布 8 个版本，其中过去 12 个月发布了 8 个；首次发布于 2026/02/19。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

