# @apexdevtools/apex-parser 中文文档

规范地址：https://npmcn.com/package/%40apexdevtools/apex-parser/

版本：5\.3\.0
npm 元数据更新时间：2026-10-16T12:34:28.897Z
中文译文更新时间：2026-11-06T09:09:33.235Z
软件包许可：BSD-3-Clause

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

原始 npm 页面：https://www.npmjs.com/package/%40apexdevtools/apex-parser
原文对照：https://npmcn.com/package/%40apexdevtools/apex-parser/?lang=original
项目主页：https://github.com/apex-dev-tools/apex-parser
源码仓库：https://github.com/apex-dev-tools/apex-parser

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

- 包体积（解压后）：17.7 MB，137 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：^20\.19\.0 \|\| ^22\.13\.0 \|\| \>=24
- 运行依赖：1 个
- 首次发布：2022-06-14T18:52:33.420Z
- 最新版本发布：2026-10-16T12:34:28.708Z
- 近 30 天下载量：164266（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：24（近 12 个月 5 个）

## 中文简介

Appex 语言的 Javascript 解析器

## 安装

```sh
npm install @apexdevtools/apex-parser
```

也可以使用：`pnpm add @apexdevtools/apex-parser`、`yarn add @apexdevtools/apex-parser`、`bun add @apexdevtools/apex-parser`

## README

# 最高参数

销售力Apex(包括触发器和内置SOQL/SOSL)的解析器. 这是基于 [ANTLR 4号卫星](https://www.antlr.org/) 语法,看 [`antlr/BaseApexParser.g4`](https://npmcn.com/package/%40apexdevtools/apex-parser/antlr/BaseApexParser.g4). 目前为Java和JavaScript/TypeScript目标被打包.

套件包括ANTLR4所生成的型号外加可选外加以方便. TypeScript 包导出 ANTLR 类型的别名, 而两个包的抽象度类似 `ApexParserFactory` 财务报告和审定财务报表 `ApexErrorListener`。下面和测试班中的例子很少.

语法旨在与平台编译器相匹配. 如果它故意不这样做,差异记录在 [销售行为的差异](https://npmcn.com/package/%40apexdevtools/apex-parser/doc/SalesforceDifferences.md)。 。 。 .

## 安装

### 马文

```xml
<dependency>
    <groupId>io.github.apex-dev-tools</groupId>
    <artifactId>apex-parser</artifactId>
    <version><!-- version --></version>
</dependency>
```

### 国家预防机制

```sh
npm i @apexdevtools/apex-parser
```

Npm 包装多个 JavaScript 输出 :

-   现代节点和捆绑机的无害环境管理,由 `import`。 。 。 .
-   常见JS `require`。 。 。 .
-   由浏览器意识捆绑者选择的浏览器ESM捆绑.
-   TypeScript 为根包和导出子路径声明.

这些通过软件包曝光 `exports` 因此,大多数消费者应该从软件包名称而不是从 `dist` 路径 :

```typescript
import { ApexParserFactory } from "@apexdevtools/apex-parser";
```

一般JS消费者可以使用 `require`数字 :

```javascript
const { ApexParserFactory } = require("@apexdevtools/apex-parser");
```

浏览器捆绑包括解析器 API, 但不包括节点文件检查帮助器, 如 `check` 财务报告和审定财务报表 `checkProject`。 。 。 .

## 使用量

`ApexParser` 访问树的切入点 :

-   `compilationUnit()`一个类文件.
-   `triggerUnit()`,触发文件.
-   `anonymousUnit()`,一个最高脚本文件.
-   `query()`,一个原始的SOQL查询.

### 探索解析树( TypeScript)

```typescript
import {
  ApexParserBaseListener,
  ApexParserBaseVisitor,
  ApexParseTreeWalker,
  ApexParserFactory,
} from "@apexdevtools/apex-parser";

const parser = ApexParserFactory.createParser("public class Hello {}");

/*
 * Use a visitor. Return value and manual control.
 */
class Visitor extends ApexParserBaseVisitor<any> {}

const visitor = new Visitor();
visitor.visit(parser.compilationUnit());


/*
 * Or walk with listener. Enter/exit operations - for whole tree.
 */
class Listener extends ApexParserBaseListener {}

const listener = new Listener();
ApexParseTreeWalker.DEFAULT.walk(listener, parser.compilationUnit());
```

### 抓取语法错误

Lexer出错(如无效的字符串逃生序列)只报告给附在Lexer上的收听者,而解析器出错只报告给附在解析器上的收听者. 从一个听众那里捕捉到两个,使用 `createLexerAndParser`,这给听者 两者:

```typescript
import { ApexParserFactory, ApexErrorListener } from "@apexdevtools/apex-parser";

class MyListener extends ApexErrorListener {
  apexSyntaxError(line: number, column: number, msg: string): void {
    console.log(`${line}:${column} ${msg}`);
  }
}

const { parser } = ApexParserFactory.createLexerAndParser(source, new MyListener());
parser.compilationUnit();
```

Java API 等同:

```java
ApexErrorListener listener = new MyListener();
LexerAndParser pair = ApexParserFactory.createLexerAndParser(
  CharStreams.fromString(source), listener);
pair.getParser().compilationUnit();
```

### SOSL 引用

SOSL FIND在嵌入Apex时使用"作为引用字符,在API括号中使用:

```sosl
Find {something} RETURNING Account
```

要解析 API 格式,有一个替代解析规则, `soslLiteralAlt`,可以用来代替 `soslLiteral`。见 `SOSLParserTest` 对于这些差异的一些例子.

## 发展

### 先决条件

-   JDK 11+(用于ANTR工具)
-   马文
-   ^20.19.0, ^22.13.0, 或 >=24

### 大楼

外包包含脚本来构建两种分布:

```shell
# Run once - prepare for dev (installs deps, runs antlr gen)
npm run init

# Run antlr gen, compile and test
npm run build
```

或者,你可以设置,然后建立 每一个分布:

```shell
npm run init:npm
npm run build:npm

npm run init:jvm
npm run build:jvm
```

### 测试

#### 单位测试

测试的更多选项 :

```shell
# From ./npm
npm run build
npm test
# File and test name regex filtering
npm test -- ApexParserTest -t Expression

# From ./jvm
mvn test
```

#### 系统测试

系统测试使用一组样本项目 [`apex-samples`](https://github.com/apex-dev-tools/apex-samples) 仓库。 执行 README 指令 `apex-samples` 以查看该选项所使用的版本标签中的子模块 [构建工作流程](https://npmcn.com/package/%40apexdevtools/apex-parser/.github/workflows/Build.yml)两种包必须事先建造,因为js系统测试也使罐子产出.

为了进行测试:

```shell
# Set SAMPLES env var to samples repo location
export SAMPLES=<abs path to apex-samples>

# From root dir
npm run build
npm run systest
```

与快照有关的系统测试失败可能突出回归. 如果预期出错或样本已发生变化,则使用 `npm run systest:update` 然后执行修改.

## 源代码许可证( L)

所有源代码都使用3 Clause BSD许可证. 唯一包括的第三方成分是Apex Antlr4语法原出自 [Tooling-force.com (英语)](https://github.com/neowit/tooling-force.com),虽然现在使用的这个版本与原版本明显不同.

## 常见问题

### @apexdevtools/apex-parser 是什么？

Appex 语言的 Javascript 解析器

### 如何安装 @apexdevtools/apex-parser？

在项目目录运行 npm install @apexdevtools/apex-parser，或使用 pnpm add / yarn add / bun add。

### @apexdevtools/apex-parser 支持 TypeScript 吗？

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

### @apexdevtools/apex-parser 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @apexdevtools/apex-parser 需要什么版本的 Node\.js？

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

### @apexdevtools/apex-parser 可以商用吗？

@apexdevtools/apex-parser 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @apexdevtools/apex-parser 的下载量有多少？

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

### @apexdevtools/apex-parser 还在维护吗？

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

