# @aglyn/tenant-runtime 中文文档

规范地址：https://npmcn.com/package/%40aglyn/tenant-runtime/

版本：1\.18\.0
npm 元数据更新时间：2026-11-07T06:44:46.796Z
中文译文更新时间：2026-11-05T22:26:39.629Z
软件包许可：Apache-2\.0

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

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

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

- 包体积（解压后）：1.1 MB，114 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：6 个
- peer 依赖：firebase-admin ^14\.3\.0
- 首次发布：2026-09-20T23:55:04.990Z
- 最新版本发布：2026-11-07T06:44:46.490Z
- 近 30 天下载量：12388（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：152（近 12 个月 152 个）

## 中文简介

服务器侧运行时间服务于已公布的 Aglyn 站点:插件所收听的主机-事件接合,以及将存储的屏幕转换成一页所制作的节点树的屏幕-组合管道. 如果你正在运行 Aglyn 的租户服务器,安装它,

## 安装

```sh
npm install @aglyn/tenant-runtime
```

也可以使用：`pnpm add @aglyn/tenant-runtime`、`yarn add @aglyn/tenant-runtime`、`bun add @aglyn/tenant-runtime`

## README

# @aglyn/tenant-runtime (英语)

为已出版的Aglyn网站服务的服务器端运行时间:主机活动 切换插件的收听, 和屏幕组合管道 将屏幕存储到一个页面生成的节点树上。 运行时安装 Aglyn 的租户服务器, 或者写需要发送主机的插件服务器代码 事件或编成屏幕.

> 从Aglyn monorepo出版到npm. 随后的版本 [语义版本](https://semver.org/)。 。 。 .

## 安装

```
npm install @aglyn/tenant-runtime
```

同伴依赖性 :

-   `firebase-admin`

此软件包仅限服务器使用 。 它读出Firestore通过 `firebase-admin` 财务报告和审定财务报表 不得从客户端代码导入.

## 里面有什么东西

从包根起,主机-活动运行时间. 举办活动时,没有 单个插件拥有, 并且不运行事件触发的内容 :

-   `emitHostEvent` 是一个释放点。 它把一个事件交给每个注册的 主机- 事件收听器并返回任何站点提示, 所以请求/ 响应 发射器(表单提交、预订)可以露出它们.
-   `registerHostEventListener` 插件如何听到主机事件。 一个插件 从它的服务器声明条目注册, 应用程序运行在启动时, 所以 一个从未加载插件的核心路由仍然到达它。 自动化 引擎是一个这样的收听器,并生活在自己的插件中.
-   `dispatchHostAutomation` 以 id 为站点活动运行一个自动化 已出版的网页通过发送的听众自我评价.
-   `listHostEventListeners` 财务报告和审定财务报表 `runHostEventListeners` 诊断和诊断 直接使用.

联系人抓取和所有者指派为客户关系管理 (单位:千美元)`@aglyn/plugins-crm/server/capture-host-contact`, (中文(简体) ), `@aglyn/plugins-crm/server/assign-contact-owner`: 另一个插件报告 a 通过平台的捕获合同(`plugin-contact-capture`) (中文(简体) ). 以 id 或名称查找数据集是数据插件的 (单位:千美元)`@aglyn/plugins-data/server/resolve-dataset`) (中文(简体) ).

通过子路径,屏幕组合管道。 这是读取路径 由租户应用程序的服务器渲染和任何需要插件共享 在服务器上创建屏幕 :

-   `@aglyn/tenant-runtime/get-screen` (单位:千美元)`getScreen`和 `@aglyn/tenant-runtime/get-screen-version` (单位:千美元)`getScreenVersion`(中文(简体) )
-   `@aglyn/tenant-runtime/compose-screen-nodes` (单位:千美元)`composeScreenNodes`, (中文(简体) ), `composeNodesWithChrome`(中文(简体) )
-   他们身后有装载者 `get-layout-version`, (中文(简体) ), `get-components`, (中文(简体) ), `get-variables`, (中文(简体) ), `get-forms`, (中文(简体) ), `get-plugin-installs` 重复的一行来了 从保持它们的插件,通过 `@aglyn/aglyn/plugin-manager/repeat-rows`
-   用于收藏、作者和搜索页面的页面作曲: `compose-collection-page`, (中文(简体) ), `compose-author-page`, (中文(简体) ), `compose-search-page`
-   `apply-publish-schedule` (单位:千美元)`applyDuePublishSchedule`(中文(简体) )

每个子路径映射到下面的文件 `src/lib`。 。 。 .

## 使用量

正在从插件服务器代码听到主机事件 :

```ts
import { registerHostEventListener } from '@aglyn/tenant-runtime'

registerHostEventListener('my-plugin', {
  async onEvent(hostId, event, payload, context) {
    // react to the event; optionally return site alerts.
    // `context.actor` is who caused it, when the emitting door knew:
    // { kind: 'member' | 'visitor' | 'apiKey' | 'platform', uid?, email?, apiKeyName? }
  },
})
```

抚养一个,是谁造成的:

```ts
await emitHostEvent(hostId, 'contactStageChanged', payload, {
  actor: { kind: 'member', uid, email },
})
```

在服务器上装入屏幕 :

```ts
import { getScreen } from '@aglyn/tenant-runtime/get-screen'

const screen = await getScreen({ hostId, screenId })
```

## 变形道从不等待无约束 I/ 欧

页面渲染,和它等待的一切——布局,页面数据加载器, 此管道, 插件页面浓缩器, 解析器, 重定向解析器, 重复 读取器和计算变量, 和它们面前的中间器件—— 从不 等待出入境的I/O网络,没有自己的最后期限(AGL-3565).

-   将等待包起来 `boundedAwait(work, ms, fallback, label)` 从 `@aglyn/shared-util-http/bounded-await`: 以 `fallback` 何时 `ms` 不管做什么,都通过 传过来 `signal` 改为 `fetch` 所以请求也取消了 把尸体放进去 工作时 一个 `AbortSignal` 它本身不是最后期限:在Vercel,下一位 补丁 `fetch` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}我答应你 `AbortSignal.timeout(2500)` 上面还有月台上的每一页 等待60秒函数限制 .
-   选择一个可折回的页面,并说出它的含义: 链接到的字体样式表, 判断“ 无法获取 ” , 重定向规则 .
-   一个进程缓存, 它比请求有效 仅持有已结算的值 (单位:千美元)`createSettledValueCache`拒绝承诺。 一个缓存的飞行 在以后的每一个判决中,都等待承诺,每个判决都有新的期限 一无所有.
-   工作不需要答案 解开 `void`从来没有等待.

`apps/tenant/specs/render-path-bounded-io.spec.ts` 扫描每个符号 a 能够达到 `fetch`页:1 `fetch` 作为一种价值 一种象征 交换或 `http(s).request`拒绝一个没有落后的人 `boundedAwait` 或者说 `void`。其许可列表每行都包含一个理由,可能只包含 收缩。 消防员读取 `firebase-admin` 在外边,他们携带着 客户自己的最后期限.

## 怎样才合适

这是 `tenant` 软件包地图的范围。 这只取决于 `@aglyn/aglyn`, (中文(简体) ), `@aglyn/tenant-data-admin` (其服务器数据层)和 `firebase-admin`,因此它可以从租户应用的API线路中导入,并且 从插件的服务器处理器中不将应用程序代码拖入库中。 A 类 插件可能导入它; 它从不导入插件 。 插件到达它 登记一个听众, 运行时间只知道通过这个 登记和装货机清单.

## 许可证

阿帕奇2.0 (英语). 资料来源: [https://github.com/aglyn/aglyn/tree/main/libs/tenant/runtime 互联网档案馆的存檔,存档日期2014-12-22](https://github.com/aglyn/aglyn/tree/main/libs/tenant/runtime)

## 常见问题

### @aglyn/tenant-runtime 是什么？

服务器侧运行时间服务于已公布的 Aglyn 站点:插件所收听的主机-事件接合,以及将存储的屏幕转换成一页所制作的节点树的屏幕-组合管道\. 如果你正在运行 Aglyn 的租户服务器,安装它,

### 如何安装 @aglyn/tenant-runtime？

在项目目录运行 npm install @aglyn/tenant-runtime，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：firebase-admin（^14\.3\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aglyn/tenant-runtime 支持 TypeScript 吗？

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

### @aglyn/tenant-runtime 支持 ESM 还是 CommonJS？

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

### @aglyn/tenant-runtime 可以商用吗？

@aglyn/tenant-runtime 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @aglyn/tenant-runtime 的下载量有多少？

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

### @aglyn/tenant-runtime 还在维护吗？

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

