# @broberg/deploy-core 中文文档

规范地址：https://npmcn.com/package/%40broberg/deploy-core/

版本：0\.11\.0
npm 元数据更新时间：2026-11-05T22:50:59.603Z
中文译文更新时间：2026-11-09T00:32:26.860Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40broberg/deploy-core
原文对照：https://npmcn.com/package/%40broberg/deploy-core/?lang=original
项目主页：https://github.com/broberg-ai/components#readme
源码仓库：https://github.com/broberg-ai/components

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

- 包体积（解压后）：335 kB，8 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-06-30T05:37:53.171Z
- 最新版本发布：2026-11-05T22:50:59.239Z
- 近 30 天下载量：1939（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 15 个）

## 中文简介

Fly Live HMAC增量内容同步和一个Fly.io客户端(Machines REST + GraphQL 机队使用)——为broberg.ai机队共享部署执行层.

## 安装

```sh
npm install @broberg/deploy-core
```

也可以使用：`pnpm add @broberg/deploy-core`、`yarn add @broberg/deploy-core`、`bun add @broberg/deploy-core`

## README

# @broberg/部署核心

Broberg.ai舰队共享部署执行层. 它包含三件事:

| 编 | 它会做什么 |
| --- | --- |
| **飞行生活** (单位:千美元)`flyLiveDeploy`, (中文(简体) ), `syncContent`, (中文(简体) ), `diffManifests`, (...) (中文(简体) ) | HMAC在Fly应用程序上签名的增量内容同步,加上了后续的一次性构建. |
| **`FlyClient`** (自0.4.0起) | Fly.io API:在机器REST API之上的应用和机器,GraphQL称机队使用. |
| **`createDeployEventBus`** (自0.1.0起) | 进程内部署- 活动总线: Webhook 接收器发布, SSE 端点订阅, 每 `orgId:siteId`。 。 。 . |

没错 **没有** 包含 Cloudflare Pages 或 GitHub Pages 供应商(计划用 F033.2) .

## 部署活动公交车(0.0.0,F033.3)

```ts
import { createDeployEventBus } from "@broberg/deploy-core";

const bus = createDeployEventBus({
  dispatch: (e) => sendPush(e),          // optional: only for "built" / "errored"
  onError: (err, where) => log.warn(where, err), // default console.warn
});
const off = bus.subscribe(orgId, siteId, (e) => sse.send(e));
bus.publish({ type: "page-build", orgId, siteId, status: "built", url, ts: new Date().toISOString() });
bus.listenerCount(orgId, siteId);
```

-   **每个应用程序一班车**,出自工厂——从不使用模块级地图,因此一个过程中的两辆公交车从不相听.
-   **没有 `originator` 字段.** F033.4计划用于Upmetrics的中继器,并关闭了30/10: Upmerics从项目本身引出发件人.
-   **向一个网站出版,没人听 是没有的.** 推钩仍然会为终端事件起火,因为推到没有标签的用户.
-   **丢弃的听众或失败的推力通过 `onError`**,从不向出版的网页胡克扔出,也从不默默地吞下(cms的原作有空接取来).
-   **单一过程.** 一个应用程序的若干实例需要Redis pub/sub;超出范围.

## Fly Live:服务器固定到达已运行的应用程序(0.8.0,F033.18)

`flyLiveDeploy` 同步 Content 到一个响应的应用程序 `/_icd/health`;它从未替换过容器内的服务器代码. 因此,服务器修补(0.7.0's Cache-Control)只到达了碰巧被重新提供的应用程序. 现在服务器报告 `FLY_LIVE_SERVER_VERSION` ——自身代码和Dockerfile的散列,所以服务器随时会改变——和 `flyLiveDeploy` 当一个活应用程序报告一个不同的版本时, 选择下行路径 。 结果显示: `{ mode: "infra", reason: "server version 1.0.0 ≠ 82b3…" }`。 。 。 .

**升级后的首个部署是 每一个应用程序的后期部署** (每个运行的服务器都报告旧"1.0.0"). 之后,部署再次是内容同步. `chooseDeployMode(health, expected, forceInfra)` 如果您要决定自己,则导出.

## 飞行密度

```ts
import { FlyClient } from "@broberg/deploy-core";
const fly = new FlyClient(); // token from FLY_API_TOKEN, or { token }

await fly.listApps("personal");                 // one org
await fly.listAllApps();                        // every org the token sees, all pages
const [m] = await fly.listMachines("my-app");
await fly.updateMachine("my-app", m.id, {       // resize: pass the WHOLE config
  ...m.config,
  guest: { ...m.config.guest!, memory_mb: 512 },
});
await fly.waitForState("my-app", m.id, "started", 120);
const { state, exitCode } = await fly.waitForExit("my-app", jobId);

const { entries, nextToken } = await fly.getMachineLogs("my-app", m.id);        // since 0.6.0
await fly.getMachineLogs("my-app", m.id, { nextToken });                         // only newer lines — poll this to tail
await fly.listVolumes("my-app");                // destroyed ones included — filter on state
await fly.deleteVolume("my-app", "vol_123");     // 0.11.0 — Fly refuses an attached volume (FlyApiError). A lost answer + retry can throw 404 although it IS gone: re-read listVolumes before saying "not deleted"
await fly.updateVolume("my-app", "vol_123", { snapshot_retention: 14, auto_backup_enabled: true }); // 0.11.0 — only the fields you give are sent
await fly.listIps("my-app");                    // 0.9.0 — [{ ip, shared, region, serviceName, createdAt }]; a failure throws, never []
await fly.promQuery("personal", 'sum(fly_instance_memory_mem_available{app="my-app"})');
```

还: `getApp`, (中文(简体) ), `createApp`, (中文(简体) ), `deleteApp`, (中文(简体) ), `getMachine`, (中文(简体) ), `createMachine`, (中文(简体) ), `startMachine`, (中文(简体) ), `stopMachine`, (中文(简体) ), `destroyMachine`, (中文(简体) ), `listOrgs`, (中文(简体) ), `setSecrets`, (中文(简体) ), `allocateIp`。 。 。 .

### 手卷客户端通常不会

每一份都是用消费者自己的副本或活的API来衡量的 (24 September 2026)——每个测试如果被取消则会红:

-   **仅在第二次尝试中重试成功之处 :** 网络错误, 408, 429, 5xx. A 401, 403, 404或422一并投掷 `FlyApiError { status, method, path }`. (一份重审了一切的复制品 将错误的符号变成了30分钟) 投票结果。 )
-   **`waitForExit` 报告 `exitCode: null` 当飞行记录无.** 没有 这叫成功,你决定.
-   **`waitForExit` 扔出一个404的机器 它从未见过** (自0.5.0起) 飞 回答404"机器没有找到" 无论是错误的ID 和错误的Token,所以 a 第一次民意调查的404没有被"破坏". 只有一台机器在前面看到过 随即消失的民意调查(自发)报告为: `destroyed`。 。 。 .
-   **`promQuery` 隐藏 Fly 的 Prometheus 认证陷阱** (自0.5.0起) 飞来飞去 普罗米修斯回答401 `Bearer` 和想要的,我们 `FlyV1 <token>`; 机器 API 带熊儿去 HTTP 200 带 `status: "error"` 掷出.
-   **`waitForState` 将Fly的408读作"还没有".** 飞来飞去 `/wait` 回答 408 当 它本身的超时 ; 客户端一直询问直到您超时为止, 然后掷出 `FlyTimeoutError`。 。 。 .
-   **GraphQL HTTP 200 不成功 .** 飞去回答200个坏信条 机构错误; 客户端丢出一个 `FlyApiError` 状态401.
-   **`listAllApps` 完成或丢出.** 它走遍每一页,检查 倒计时 Fly自己的 `totalCount`。片面列表从来就不是整体 第一——当呼叫者删除其中缺失的内容时,这很重要.
-   **`getMachineLogs` 使用 Fly 的日志 API,而不是明显的地址** (自0.6.0起). `api.machines.dev/v1/apps/<app>/machines/<id>/logs` 答复404——计量 2026年9月29日 — 吞入错误的手卷传粉器显示为空日志 永远 真正的终点是 `api.fly.io/api/v1/apps/<app>/logs?instance=<id>` 像普罗米修斯一样 `FlyV1 <token>`200个没有 `data` 数组抛出.
-   **符号从未在错误中出现** 留言或身体.

### 对真实的飞行API进行验证

`test/live/fly-api.live.ts` 运行针对现有应用程序的只读运行(对比 与 `flyctl machines list` 编号 : `flyctl volumes list`附加时 `promQuery` 编辑 永远看不到的机器 404; `FLY_LIVE_READ_ONLY=1` ——创建应用程序,创建 机器, 调整大小并读回, 停, 一个退出 3, 销毁, 删除的过程 app——在一个被丢弃的应用程序中,它总是删除. 手动运行;不是 `vitest run`。 。 。 .

## 常见问题

### @broberg/deploy-core 是什么？

Fly Live HMAC增量内容同步和一个Fly\.io客户端\(Machines REST \+ GraphQL 机队使用\)——为broberg\.ai机队共享部署执行层\.

### 如何安装 @broberg/deploy-core？

在项目目录运行 npm install @broberg/deploy-core，或使用 pnpm add / yarn add / bun add。

### @broberg/deploy-core 支持 TypeScript 吗？

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

### @broberg/deploy-core 支持 ESM 还是 CommonJS？

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

### @broberg/deploy-core 可以商用吗？

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

### @broberg/deploy-core 的下载量有多少？

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

### @broberg/deploy-core 还在维护吗？

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

