# @di-framework/bindings 中文文档

规范地址：https://npmcn.com/package/%40di-framework/bindings/

版本：6\.0\.30
npm 元数据更新时间：2026-11-06T22:52:52.661Z
中文译文更新时间：2026-11-12T06:24:16.486Z
软件包许可：\(MIT OR Apache-2\.0\)

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

原始 npm 页面：https://www.npmjs.com/package/%40di-framework/bindings
原文对照：https://npmcn.com/package/%40di-framework/bindings/?lang=original
项目主页：https://github.com/di-framework/platform
源码仓库：https://github.com/di-framework/platform

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

- 包体积（解压后）：61.3 kB，39 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：typescript ^5 \|\| ^6 \|\| ^7，@di-framework/core ^6，@di-framework/repo ^6\.1\.0
- 首次发布：2026-09-27T23:02:57.946Z
- 最新版本发布：2026-11-06T22:52:52.246Z
- 近 30 天下载量：3596（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：28（近 12 个月 28 个）

## 中文简介

原生平台WIT服务为DI Framework应用装订.

## 安装

```sh
npm install @di-framework/bindings
```

也可以使用：`pnpm add @di-framework/bindings`、`yarn add @di-framework/bindings`、`bun add @di-framework/bindings`

## README

# @ di- framework/ 绑定

土著 [黄云](https://wasmcloud.com/) WIT服务对DI框架应用程序的约束.

每个混凝土等级都是DI标志,一个名字 `hostInterfaces` 条目和构建时间 WIT 页:1 将软件包映射到 hamCloud/ WASI 界面,而不是创建第二个 能力词汇.

这个包 **消耗量** 主机界面绑定 。 它不提供PostgreSQL, Redis, NATS, 或对象存储, 并且它永远不会嵌入秘密值。 儒格马普斯和秘密留在普鲁米, 地平面,Crossplane,Helm,或者另一个基础设施层.

## 约束

```ts
import { Component, Container } from '@di-framework/core/decorators';
import { KeyValue, Postgres, PlatformBinding } from '@di-framework/bindings';

@PlatformBinding('user-database')
@Container()
export class UserDatabase extends Postgres {}

@PlatformBinding('sessions', { interfaces: ['store', 'atomics'] })
@Container()
export class Sessions extends KeyValue {}

@PlatformBinding('cache')
@Container()
export class Cache extends KeyValue {}
```

`@WasmCloudBinding` 作为折旧的别名出口的 `@PlatformBinding` 用于反相; 新代码应当使用 `@PlatformBinding`。 。 。 .

把那些课放进去 `src/bindings.ts`。在 enCloud CLI 扩展名中发现文件,贡献 每个类到共享 WIT 要求图,生成真正的 WIT 来宾导入,并制作 匹配 `hostInterfaces` 条目。 PostgreSQL 条目省略 `hostInterfaces[].name` 以匹配 未加标签的导入; 绑定名仍然可以识别 DI 来宾及其配置覆盖 . 编译的来宾世界没有标签(`import wasmcloud:postgres/query@0.2.0`) 因为 qjs 组件无法 发射 `cm-implements` 标签进口到现在。 已导入 `async func`s(后置、按键值、blobstore、, 信件、 秘密、 输出的 HTTP 组件 `@di-framework/componentize-qjs` (时间48). 设定 `DI_FRAMEWORK_COMPONENTIZE_QJS` 以覆盖CLI. `wasi:config@0.2.0-rc.1` 正在同步,并与 stock jco 组成.

对于 PostgreSQL ,配置主机连接 `WASH_POSTGRES_URL` (或 `WASMCLOUD_POSTGRES_URL` 与CLI的 `platform dev` 命令)和设置 `config: { database: 'orders' }` 装订。 未命名的导入使用主机 连接和所选数据库; 多个独立认证的 PostgreSQL 此快速JS 路径尚未支持绑定 。 来宾先初始化 应用程序,包括模块启动时构建的绑定.

## 交易语义

`wasmcloud:postgres@0.2.0` 已经 `query` 财务报告和审定财务报表 `queryBatch`,没有交易处理。 每通电话都会响 到任何集合连接都是免费的。 命名导入( E)`user-database-query`服务于 无关联的每个证书池,所以 `BEGIN` 在一个呼叫中不覆盖下一个 语句。 A 类 `COMMIT` 能降落在从未见过的连接上 `BEGIN`连接 留下来 `idle in transaction`。 。 。 .

使用宾客 `@di-framework/repo` 打开绑定器 `openPostgresDatabase` 从 `@di-framework/bindings/postgres`。手柄是一个 `AutocommitDatabase`。每个声明是: 自有交易,以及 `transaction(fn)` 运行 `fn` 在同一个手柄上。 适配器从不发送 `BEGIN`, (中文(简体) ), `COMMIT`,或 `ROLLBACK`。 。 。 . `FOR UPDATE` 且咨询锁定仅对声明有效 带着它们.

在一个语句中保留一个不变量:

-   有条件 `UPDATE … RETURNING`
-   数据修改CTE
-   `INSERT … SELECT … WHERE NOT EXISTS`

`run` 套装 `changes` 从一行回来。 提供者不报告命令标记,所以 计数为 a `RETURNING` 列表中选择一个选项。 A 类 `changes` 价值 `0` 意思是没有一行人回来了,这就是.. `UPDATE` 或者说 `DELETE` 无 `RETURNING` 报告,即使Postgres修改了行.

`exec` 将脚本作为一体发送 `queryBatch`。主机运行一个集合客户端的字符串,以及 Postgres将多语种简单的查询视为一个隐含的交易.

`atomicBatch` 用于一个只写到的序列,它必须做出或卷起,并且 不在发言之间阅读。 它使每个参数成为一字形(引文翻倍,负) 数字以括号表示,使其无法形成一个 `--` 并提交该脚本为一体 `queryBatch`。脚本没有 `BEGIN` 或者说 `COMMIT`Postgres 运行一个多声明简单 查询为一项隐含交易,然后将其卷回错误,返回集合客户端闲置. asmCloud v 2. 8.0运行一个集合客户端的字符串: `crates/wash-runtime/src/plugin/wasmcloud_postgres/async_p3.rs` 检查一个客户端 `query_batch` 和电话 `client.batch_execute` (单位:千美元)`batch_with_client`, 第191行).

```ts
import { openPostgresDatabase } from '@di-framework/bindings/postgres';

const db = openPostgresDatabase(database);
await db.atomicBatch([
  { sql: 'INSERT INTO t (name, n) VALUES (?, ?)', params: ["o'brien", -1] },
]);
```

`@di-framework/repo` 是此软件包的可选对等端。 主要内容 `@di-framework/bindings` 条目 让它卸下 导入 `@di-framework/bindings/postgres` 从一个客人,依赖 `@di-framework/repo`。 。 。 .

秘密材料被引用,从未内含:

```ts
@PlatformBinding('user-database', { secretFrom: 'orders-user-database' })
@Container()
export class UserDatabase extends Postgres {}
```

何时 `secretFrom` ,默认的 Kubernetes 秘密名称是 `<application>-<binding>`。 。 。 .

## 支助能力

| 类 | WIT 软件包 | 版本 |
| --- | --- | --- |
| `Postgres` | `wasmcloud:postgres` | 0.2.0 (中文(简体) ) |
| `KeyValue` | `wasmcloud:keyvalue` | 0.2.0 (中文(简体) ) |
| `Blobstore` | `wasmcloud:blobstore` | 0.1.0 (中文(简体) ) |
| `Messaging` | `wasmcloud:messaging` | 0.3.0 (中文(简体) ) |
| `Config` | `wasi:config` | 0.2.0-摄氏1度 |
| `Secrets` | `wasmcloud:secrets` | 2.1.0 国家 |
| `OutgoingHttp` | `wasi:http` `client` | 0.3.0 (中文(简体) ) |

软件包版本独立于WASI 0.3组件-模型预览.

## 单位测试

通过容器替换装订:

```ts
class FakeUserDatabase extends UserDatabase {
  override query() {
    return Promise.resolve([]);
  }
}

testContainer.registerValue(UserDatabase, new FakeUserDatabase());
```

## 管理 PostgreSQL(即将发布)

```ts
@PlatformBinding('orders-db', { serviceName: 'orders' })
export class OrdersDatabase extends Postgres {}
```

以 `di-framework platform service create postgres --name orders --wait`。 。 。 . 部署将产生工作量自有的服务 连接机密。 多个绑定可以共享一个服务; 单独的服务使用 独立证书和PVC. `serviceName` 目前只支持 PostgreSQL ,不能与手动连接配置相组合.

见 [postgreSQL 寿命周期和恢复](https://npmcn.com/package/%40di-framework/di-framework-platform/README.md#dedicated-postgresql-upcoming-release) 用于存储先决条件、保留和删除.

## 常见问题

### @di-framework/bindings 是什么？

原生平台WIT服务为DI Framework应用装订\.

### 如何安装 @di-framework/bindings？

在项目目录运行 npm install @di-framework/bindings，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：typescript（^5 \|\| ^6 \|\| ^7）、@di-framework/core（^6）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @di-framework/bindings 支持 TypeScript 吗？

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

### @di-framework/bindings 支持 ESM 还是 CommonJS？

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

### @di-framework/bindings 可以商用吗？

@di-framework/bindings 使用 \(MIT OR Apache-2\.0\) 许可。可在 MIT、Apache-2\.0 中任选其一遵守。选择 MIT 时，宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @di-framework/bindings 的下载量有多少？

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

### @di-framework/bindings 还在维护吗？

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

