# @demlik/tea 中文文档

规范地址：https://npmcn.com/package/%40demlik/tea/

版本：0\.27\.0
npm 元数据更新时间：2026-11-08T23:30:07.280Z
中文译文更新时间：2026-11-11T22:07:08.828Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40demlik/tea
原文对照：https://npmcn.com/package/%40demlik/tea/?lang=original
项目主页：https://demlik.run/
源码仓库：https://github.com/kamp-us/demlik

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

- 包体积（解压后）：3.8 MB，160 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：ws ^8，react ^18 \|\| ^19，effect ~4\.1\.1，vitest ^2 \|\| ^3 \|\| ^4 \|\| ^5，react-dom ^18 \|\| ^19，fast-check ^3 \|\| ^4，@opentelemetry/api ^1\.9\.0
- 首次发布：2026-06-03T01:12:10.330Z
- 最新版本发布：2026-11-08T23:30:06.953Z
- 近 30 天下载量：40934（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：30（近 12 个月 30 个）

## 中文简介

TEA-忠实的状态机器底盘——一包,每个主机适配器. 核心+子+测试,外加反应,持久对象,Chrome扩展,节点,内膜,devtools,属性测试模块作为子路径.

## 安装

```sh
npm install @demlik/tea
```

也可以使用：`pnpm add @demlik/tea`、`yarn add @demlik/tea`、`bun add @demlik/tea`

## README

# @demlik/tea (英语)

一个TEA / Elm-Architecture TypeScript库,用于耐用,可重放的状态机器——一个纯还原器,每个主机适配器.

## 安装

```sh
pnpm add @demlik/tea
```

一次性依赖是 `@standard-schema/spec`,只显示类型包 为您安装. [`Cmd.define`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#cmd) 带任何标准Schema, 所以把计划 您已经使用的库(按原样分割,或 Effect Schema 通过 `Cmd.make` 那个 `@demlik/tea/effect` 出口)。 东道主和 测试适配器骑在可选的同位素上, 您只为您使用的表面添加 : `react` 编号 : `react-dom` (单位:千美元) `./react` 钩子, `ws` (节点WebSocket子), `fast-check` (单位:千美元) `./pbt` (一) 物业检验助手, `vitest` (测试) 公用事业, `effect` (单位:千美元) `./effect` 发动机),以及 `@opentelemetry/api` (单位:千美元) `./otel` 页:1.

## 快速启动

A 类 [机器](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#machine) 是纯数据: a `init` 还有一个 [`update`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#update) 地图按键 [`Msg`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#msg) 类型. [`run`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#run) 驱动它,当它有影响 你手 `run` 页:1 [`interpret`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#interpret) 地图 执行者; [`dispatch`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#dispatch) 折叠 a `Msg`· ; `getState` 读取当前 [型号](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#model)。您将模型和模型命名为 `Msg` 工会 一次,在 `types`;其他一切都是从机器本身推断出来的. 每一个 这些单词在 [词汇表](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md)。 。 。 .

```ts
import { defineMachine } from "@demlik/tea";
import { run } from "@demlik/tea/promise";

type State = { readonly count: number };
type Msg = { readonly type: "increment" } | { readonly type: "reset" };

const counter = defineMachine({
  types: { model: {} as State, msg: {} as Msg },
  init: (loaded) => (loaded !== null ? [loaded, []] : [{ count: 0 }, []]),
  update: {
    increment: (s) => [{ count: s.count + 1 }, []],
    reset: () => [{ count: 0 }, []],
  },
});

const runtime = await run(counter, {}).ready;
await runtime.dispatch({ type: "increment" });
runtime.getState(); // { count: 1 }
```

## 两台引擎,一台机器

核心点是 `@demlik/tea`,每个 [引擎](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md#engine) 有自己的进入点。 一个机器 文件只导入核心,所以在任一引擎上都运行不变.

-   `@demlik/tea` ——核心: `defineMachine`, (中文(简体) ), `Cmd`, (中文(简体) ), `replay` 和类型。 这个 没有输入引擎.
-   `@demlik/tea/promise` - 承诺引擎。 掌门人还相承.
-   `@demlik/tea/effect` - 效应引擎(`stable`页:1 处理器 返回效果, 服务来自您的图层, 手柄的动词返回 键入出错的效果,关闭范围会打断任何内容 飞行.

[在承诺引擎上运行一个机器](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/run-on-the-promise-engine.md) 财务报告和审定财务报表 [在效果引擎上](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/run-on-the-effect-engine.md) 以同一机器文件为基础. [在一个父公司下运行许多机器](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/run-many-machines.md) 在效果引擎上启动儿童机器 `spawn`, (中文(简体) ), `tell` 财务报告和审定财务报表 `stop`。 。 。 . 来自0.15? [移徙指南](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/migrate-from-0-15.md) 显示每一个已删除或重塑的 API,在前后.

## 反应

`useMachine` 从 `@demlik/tea/react` 返回时 `[state, send]`· ; `send(msg)` 返回时 `undefined` 马上,跑步 `onError` 有一次听到步步失败的声音 一个小姐 停止后停放或发送到水槽 `DispatchDiscardedError` 下级 `phase: "discard"`。 。 。 . `useRuntime(run, { onError })` 使运行从 要么是引擎, 要么是手造的手柄, 带有承诺返回 `dispatch`,与 同样的 `[state, send]` 合同。 它的可选水槽听到丢弃物和手建 调度失败; 运行会保留自己的继器沉入. `useMachine` 使用两个引擎的 `run`。用于效果引擎通过 `runIn(runtime)` 从 `@demlik/tea/effect`与您的 `ManagedRuntime`; 其编号 `interpret` 单元格返回 a `Effect` 联 合 国 `subscribe` 运行 a `Stream`,则 寿命周期( 在严格模式下每挂载一次运行, 子暂停于 `<Activity>` 隐藏,运行停止在卸载上)是相同的. `useRuntime(run, (model) => model.views[id])` 仅当所选值改变时, 才读取一部分并重新提交运行时的更新( r)`Object.is`) (中文(简体) ).

`useBackgroundRuntime` 从 `@demlik/tea/extension` 保留 `{ state, dispatch }`, (中文(简体) ), 与虚空相归 `dispatch`。其可选性 `onError` 听到运输故障 下级 `phase: "follow-up"`;背景步骤失败到背景运行. 提供方和 `useDispatch` 遵守同样的契约.

读取州为结果. 之前等待钩子的代码 `dispatch` 应删除等待; 需要等待的主机代码应拥有运行和使用 它的发动机 `dispatch`, (中文(简体) ), `idle`,或 `done`。 。 。 .

[从 React 驱动机器](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/drive-from-react.md) 显示点击处理器、生命周期行为和出错汇.

## 重复性

与 `fileStore` 或者说 `doStore`,在命令运行前保存状态。 重新装入它. `agent.run` 自动恢复待完成的工作; 自定义机器处理启动 留言。 如果在崩溃前没有保存效果, 效果可以再次运行 .

[让机器耐用](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/make-durable.md) 财务报告和审定财务报表 [理解还原与重玩](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/explanation/durability-model.md)。 。 。 .

## 文档

四个Diátaxis四角星生活在 [`docs/`](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/README.md)数字 :

-   [教学](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/tutorial/index.md) ——以学习为主的教训,通过造出真正的机器,带你通过图书馆.
-   [如何向导](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/how-to/index.md) ——以目标为导向,完成具体工作.
-   [参考文献](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/reference/index.md) ——面向信息的API描述,每个公共单元生成.
-   [解释](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/explanation/index.md) ——以理解为导向地讨论它如何运作以及它为什么被塑造成这样.

这个 [词汇表](https://github.com/kamp-us/demlik/blob/main/packages/tea/docs/glossary.md) 定义这些页面使用的每个词:Model、Msg、Cmd、Sub、Store等.

后面还有两块地表 供在图书馆工作的人使用 [`.patterns/`](https://github.com/kamp-us/demlik/blob/main/.patterns/index.md) 如何塑造代码 [`.decisions/`](https://github.com/kamp-us/demlik/blob/main/.decisions/index.md) 这就是为什么它是这样塑造的.

## 常见问题

### @demlik/tea 是什么？

TEA-忠实的状态机器底盘——一包,每个主机适配器\. 核心\+子\+测试,外加反应,持久对象,Chrome扩展,节点,内膜,devtools,属性测试模块作为子路径\.

### 如何安装 @demlik/tea？

在项目目录运行 npm install @demlik/tea，或使用 pnpm add / yarn add / bun add。

### @demlik/tea 支持 TypeScript 吗？

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

### @demlik/tea 支持 ESM 还是 CommonJS？

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

### @demlik/tea 可以商用吗？

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

### @demlik/tea 的下载量有多少？

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

### @demlik/tea 还在维护吗？

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

