@di-framework/bindings

中文文档
6.0.30发布于 2026/11/07(MIT OR Apache-2.0)TypeScriptES Module零依赖构建来源已验证近 30 天下载 3596

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

中文使用文档
文档目录5 节
  1. 约束
  2. 交易语义
  3. 支助能力
  4. 单位测试
  5. 管理 PostgreSQL(即将发布)

@ di- framework/ 绑定

土著 黄云 WIT服务对DI框架应用程序的约束.

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

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

约束

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/[email protected]) 因为 qjs 组件无法 发射 cm-implements 标签进口到现在。 已导入 async funcs(后置、按键值、blobstore、, 信件、 秘密、 输出的 HTTP 组件 @di-framework/componentize-qjs (时间48). 设定 DI_FRAMEWORK_COMPONENTIZE_QJS 以覆盖CLI. wasi:[email protected] 正在同步,并与 stock jco 组成.

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

交易语义

wasmcloud:[email protected] 已经 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 或者说 COMMITPostgres 运行一个多声明简单 查询为一项隐含交易,然后将其卷回错误,返回集合客户端闲置. asmCloud v 2. 8.0运行一个集合客户端的字符串: crates/wash-runtime/src/plugin/wasmcloud_postgres/async_p3.rs 检查一个客户端 query_batch 和电话 client.batch_execute (单位:千美元)batch_with_client, 第191行).

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。 。 。 .

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

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

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

支助能力

类WIT 软件包版本
Postgreswasmcloud:postgres0.2.0 (中文(简体) )
KeyValuewasmcloud:keyvalue0.2.0 (中文(简体) )
Blobstorewasmcloud:blobstore0.1.0 (中文(简体) )
Messagingwasmcloud:messaging0.3.0 (中文(简体) )
Configwasi:config0.2.0-摄氏1度
Secretswasmcloud:secrets2.1.0 国家
OutgoingHttpwasi:http client0.3.0 (中文(简体) )

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

单位测试

通过容器替换装订:

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

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

管理 PostgreSQL(即将发布)

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

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

见 postgreSQL 寿命周期和恢复 用于存储先决条件、保留和删除.

版本与发布记录

@di-framework/bindings 共发布 28 个版本,首次发布于 2026/09/28;过去 12 个月发布了 28 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
6.0.30latest2026/11/075 天前
6.0.292026/11/066 天前
6.0.282026/11/039 天前
6.0.272026/11/0111 天前
6.0.262026/10/3012 天前
6.0.252026/10/3013 天前

关于 @di-framework/bindings 的常见问题

@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 和提交记录判断。