# @hlang-org/interpreter 中文文档

规范地址：https://npmcn.com/package/%40hlang-org/interpreter/

版本：1\.0\.1
npm 元数据更新时间：2026-11-01T05:50:23.457Z
中文译文更新时间：2026-11-01T08:56:06.360Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40hlang-org/interpreter
原文对照：https://npmcn.com/package/%40hlang-org/interpreter/?lang=original
项目主页：https://github.com/hlang-tech/hlang/tree/main/packages/interpreter#readme
源码仓库：https://github.com/hlang-tech/hlang

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

- 包体积（解压后）：74.5 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：3 个
- 首次发布：2026-11-01T04:16:49.777Z
- 最新版本发布：2026-11-01T05:50:23.275Z
- 已发布版本数：3（近 12 个月 3 个）

## 中文简介

hlang：的进程内解释器将一个IGraph程序计算为一个实时的RxJS对象图，不需要生成代码。

## 安装

```sh
npm install @hlang-org/interpreter
```

也可以使用：`pnpm add @hlang-org/interpreter`、`yarn add @hlang-org/interpreter`、`bun add @hlang-org/interpreter`

## README

![hlang interpreter](https://raw.githubusercontent.com/hlang-tech/hlang/main/media/brand/packages/interpreter.png)

# @hlang-org翻译

运行hlang程序(`IGraph`)在当前过程中。它构建节点，连接它们的端口，并运行流，不需要代码生成和文件访问。它可以在Node.js和浏览器中工作。

[![npm](https://img.shields.io/npm/v/@hlang-org/interpreter?color=c8ccd4&labelColor=0f1114)](https://www.npmjs.com/package/@hlang-org/interpreter) [![license](https://img.shields.io/npm/l/@hlang-org/interpreter?color=c8ccd4&labelColor=0f1114)](https://github.com/hlang-tech/hlang/blob/main/LICENSE)

## 安装

```sh
npm install @hlang-org/interpreter @hlang-org/runtime
```

相同的构建发布为 `@hlang-tech/interpreter`。ESM和CommonJS的构建带有类型声明。

## 使用

```ts
import { Flow } from '@hlang-org/runtime';
import { interpret, NodeRegistry } from '@hlang-org/interpreter';

const registry = new NodeRegistry()
  .register('numbers', Numbers) // classes that extend the runtime's node classes
  .register('double', Double)
  .register('log', Log);

const handle = interpret(graph, { registry, createFlow: () => new Flow() }, { env: 'prod' });

handle.onError(({ nodeId, error }) => console.error(nodeId, error));
handle.onActivity(({ nodeId, portId }) => highlight(nodeId, portId));

// Later: stop long-running nodes and release subscriptions.
handle.dispose();
```

## 什么 `interpret` 做

1.  用验证图 `planGraph` 从 [`@hlang-org/ir`](https://www.npmjs.com/package/@hlang-org/ir)。无效图形抛出 `GraphError`.
2.  构造每个节点 `new NodeClass({ nodeId, flowId, env, middleware, config, signal })`. `config` 是节点的 `bizData`.
3.  订阅的 `@node/error` 每个可读和转换节点的端口。
4.  将每个连接连接为 `source.O(port).connect(target.I(port))`.
5.  运行每个可读根目录 `Flow`.

`@hlang-org/compiler` 发出与ES模块相同的步骤。

## API

### `interpret(graph, deps, options?)`

| 论点 | 描述 |
| --- | --- |
| `deps.registry` | 一、 `NodeRegistry` 映射每个节点 `code` 到节点类。 |
| `deps.createFlow` | 返回一个新的运行时 `Flow`. |
| `options.flowId` | 传递给每个节点的流id。省略时生成。 |
| `options.env` | 传递给每个节点的环境标签。默认的 `'prod'`. |
| `options.middleware` | 对象传递给每个节点，用于日志记录器等服务。 |

它抛出一个节点 `code` 未注册。

### 执行处理

| 成员 | 描述 |
| --- | --- |
| `flowId` | 此运行的流id。 |
| `roots` | 可读根节点。 |
| `getNode(nodeId)` | 构造的节点，或 `undefined`. |
| `onError(listener)` | 发送的错误 `@node/error` 端口。流启动时发送的错误将被缓冲，因此之后将添加侦听器 `interpret` return仍然接收它们。返回一次性对象。 |
| `onActivity(listener)` | 当数据通过连接时，为源端口和目标节点触发。返回一次性对象。 |
| `dispose()` | 停止运行：发出停止信号，调用 `onStop` 回调，并取消订阅解释器的观察器。 |

### 停止信号

每个节点接收到 `signal` 在其构造函数选项中。将长时间运行的工作绑定到它：

```js
interval(1000).pipe(takeUntil(this.opts.signal.observable)).subscribe(tick);
this.opts.signal.onStop(() => socket.close());
```

### `NodeRegistry`

`register(code, NodeClass)` （可链，最后注册者获胜）， `get(code)`， `has(code)`， `codes()`.

该包还可以再出口 `planGraph`， `GraphError`，和 `IGraph` 类型的 `@hlang-org/ir`.

来源和文件： [github.com/hlang-tech/hlang](https://github.com/hlang-tech/hlang).

## 许可证

麻省理工学院

## 常见问题

### @hlang-org/interpreter 是什么？

hlang：的进程内解释器将一个IGraph程序计算为一个实时的RxJS对象图，不需要生成代码。

### 如何安装 @hlang-org/interpreter？

在项目目录运行 npm install @hlang-org/interpreter，或使用 pnpm add / yarn add / bun add。

### @hlang-org/interpreter 支持 TypeScript 吗？

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

### @hlang-org/interpreter 支持 ESM 还是 CommonJS？

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

### @hlang-org/interpreter 需要什么版本的 Node\.js？

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

### @hlang-org/interpreter 可以商用吗？

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

### @hlang-org/interpreter 还在维护吗？

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

