# @entrinsik/vite-plugin-informer 中文文档

规范地址：https://npmcn.com/package/%40entrinsik/vite-plugin-informer/

版本：2\.14\.0
npm 元数据更新时间：2026-10-23T13:56:55.323Z
中文译文更新时间：2026-11-14T08:23:59.231Z
软件包许可：UNLICENSED

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

原始 npm 页面：https://www.npmjs.com/package/%40entrinsik/vite-plugin-informer
原文对照：https://npmcn.com/package/%40entrinsik/vite-plugin-informer/?lang=original
项目主页：https://github.com/entrinsik-org/i5#readme
源码仓库：https://github.com/entrinsik-org/i5

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

- 包体积（解压后）：412 kB，35 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=18\.0\.0
- 运行依赖：2 个
- peer 依赖：vite \>=5\.0\.0
- 首次发布：2026-01-30T16:42:59.469Z
- 最新版本发布：2026-10-23T13:56:55.048Z
- 近 30 天下载量：2103（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：25（近 12 个月 25 个）

## 中文简介

Informer App 开发的 Vite 插件和部署工具

## 安装

```sh
npm install @entrinsik/vite-plugin-informer
```

也可以使用：`pnpm add @entrinsik/vite-plugin-informer`、`yarn add @entrinsik/vite-plugin-informer`、`bun add @entrinsik/vite-plugin-informer`

## README

# @entrinsik/vite-plugin-informer (英语)

Vite插件和部署Informer App开发工具:一个本地的dev服务器接通一个活的Informer,以及一个部署管道,将您的项目组装并运至App的库.

## 快开始

```bash
npm install -g @entrinsik/informer-cli
inf login <your-informer-url>              # once: the sign-in dev and deploy use
npm create vite@latest my-app -- --template react
cd my-app
npm install -D @entrinsik/vite-plugin-informer
npx informer-init                          # wires vite config, informer.yaml, deploy scripts
npm run dev                                # local dev against the server you signed in to
npm run deploy                             # assemble + upload + deploy (or: inf deploy, which asks first)
```

没有 `.env` 需要:在环境中没有证书或 `.env`,插件询问 Informer CLI(`inf auth token`dev 服务器在运行时更新它. `INFORMER_URL` 与 `INFORMER_API_KEY` (或 `INFORMER_USER` 财务报告和审定财务报表 `INFORMER_PASS`(单位:千美元) `.env` 仍能工作,并在定时获胜; `INFORMER_URL` 单挑哪一个牌子用.

`informer-init` 留下一个已有的 `@entrinsik/vite-plugin-informer` 条目,并且只在依赖缺失时写出一个——在这种情况下,它使用自己的版本(2.12.0后;在此之前它写) `^1.0.0`) (中文(简体) ). 早些时候的脚手架还装着 `^1.0.0`,它解决到1.0.5 并且比下面的一切要早:用手碰它.

## 什么部署舰艇

组装器上传您的已建前端加上这些源树, 匹配 App 库在 Informer 中的结构 :

| 文件夹 | 成为 |
| --- | --- |
| `server/` | API路线,在App下发送 `/api` 表面 |
| `webhooks/` | 可公开调用的网路 |
| `tools/` | AI工具,对App的代理保密 |
| `mcp/` | 在 App 的 MCP 端点上曝光的工具 |
| `channels/` | 现场频道处理器 : `join` 编号 : `joined` 编号 : `leave` 和事件名处理器 `channel.send()`,或频道演员(`config.actor`: 每个频道一个直播实例,并 `start` 编号 : `tick` 编号 : `stop` 编号 : `snapshot`(三); `npm run dev` 当地运行和 `channels:` 块中 `informer.yaml` 只声明中继( 每个条目需要) `on`(中文(简体) ) |
| `migrations/` | 工作空间数据库迁移,按部署顺序运行 |
| `embeddings/` | 声明嵌入用途案例(见下文) |
| `lib/`, (中文(简体) ), `shared/` | 上面树可导入的模块 |

`informer.yaml` 宣布依赖性,原始 API 访问,角色,和(可选)最小 Informer 版本.

## 服务器兼容性

部署开始于询问目标服务器是什么( P)`GET /api/about`,一个未经认证的请求)并适应答案,因此这个插件的一个版本可以在混合放行上驱动一个车队.

下方需要的东西 **前2026.1.3 (英语)**: App频道(`channels/`,则 `channels:` 块, `broadcast()`),嵌入泵(`embeddings/`, (中文(简体) ), `embed()`),分级上传/下载(`uploads`编号 :`downloads` 在操作袋上, `__INFORMER__.upload()`页:1 `platform` 说明本身.

针对一个更老的服务器 CLI:

-   **叶子 `channels/` 财务报告和审定财务报表 `embeddings/` 在你的磁盘上.** 这些版本不承认文件夹是服务器侧面,所以那里上传的任何东西都会提供给任何App查看器——包含您的工作空间SQL和频道授权逻辑. 其余的App正常部署; 警告名称被跳过和为什么.
-   **列出每个惰性特性**因此绿色部署不能被误认为是工作部署.
-   **强制执行 `requires: { informer: … }` 自己来.** 2026.1.3之前的发布忽略了这个块,所以没有这个App宣布一个楼层会部署干净的到无法运行的服务器上. 在App的图书馆被触摸之前,部署被拒绝.

版本不可比的服务器( a) `dev` 构造,或 `/about` 被当做是电流和警告的——将它分解用于从源头建造的建筑物.

App Channels 第2阶段(插值为- 2.11: `channel.send()`,则 `joined` 导出和事件名导出 `channels/` 文件、通配符订阅、帧 `seq` 并重放, `connected`)需要搭载I5-13027的2026.1.3服务器. 版本探测器无法从早期的2026年分辨出这样的服务器. 1.3 建造,因此部署没有门:一个较早的建筑拒绝 `channels/` 文件导出 `joined` 或事件名称,并接受 `channels:` 无条目 `on` 当前服务器拒绝。 dev服务器运行阶段2的合同不管如何;插件2.12.0将其频道语义与服务器的(wildcard gating,再播放过期,以及每个用户发送预算)相协调,因此在2.11.0上,dev镜像具有阶段2表面但并非其全部行为.

频道演员(插图 2.13.0: `config.actor` 文档, `request.member`, (中文(简体) ), `__INFORMER__.serverNow()`)需要一个报告服务器 `platform.capabilities.channelActors`;在不这样做的情况下,同一文件与普通的频道处理器运行,每个消息有一个新鲜模块. 下 `npm run dev` 每个混凝土通道都有它自己的模块实例, 呼叫一次运行一次, `tick()` 在计时器上运行,演员停止 `idleMs` 在最后一页离开之后. `snapshot()` 保存在内存中,所以编辑一个文件 `channels/`, (中文(简体) ), `shared/`, (中文(简体) ), `lib/` 或者说 `server/` 重新启动新代码上运行的演员, 以相同的页面订阅快照: 正在运行的游戏在编辑中幸存下来 。 服务器的集群,租赁,计费和广播限制没有Dev对应.

具有可选链条的运行时间特征检测,因为 `platform` 在2026.1.3之前完全缺席:

```javascript
if (platform?.capabilities?.channels) broadcast('tickets', { … });
```

一个市场出版不受影响: 存档总是携带每个源树, 因为安装它的服务器在出版时并不为人所知.

## 嵌入层

Apps可以在自己的工作空间数据上公开地保持向量嵌入. 你送一个 `embeddings/` 文件夹为 **每个使用案件一个文件**;Informer平台作为 _嵌入泵_ 询问您的 App 正在等待什么, 将内容块并嵌入到计费批次中, 然后将矢量交回您的 App 以存储在自己的工作空间表格中。 你从不自己叫一个嵌入式提供者,而平台也从不保存你本体的副本——你自己的表格是分类账.

每次使用大小写文件导出 `GET` 财务报告和审定财务报表 `POST` (缺失的处理器失败部署)和(可选)a `config` 字节; 省略键取下方的默认值, 配置中没有触发的用例仅在部署和手动运行时运行 :

```javascript
// embeddings/tickets.js
export const config = { chunking: 'prose', on: ['ticket.created'], cron: '0 * * * *', revision: 1 };

// GET: the rows that still need embedding. The query IS the watermark:
// never embedded, stale, or written under an older revision.
export async function GET({ query, batch }) {
  return await query(`
    SELECT t.id, t.subject || ' ' || t.body AS content
    FROM tickets t
    LEFT JOIN ticket_embeddings e ON e.ticket_id = t.id AND e.seq = 0
    WHERE e.ticket_id IS NULL OR e.embedded_at < t.updated_at OR e.revision <> $2
    ORDER BY t.id
    LIMIT $1
  `, [batch.limit, batch.revision]);
}

// POST: store the finished vectors wherever your migrations put them.
export async function POST({ query, batch }) {
  for (const doc of batch.docs) {
    await query('DELETE FROM ticket_embeddings WHERE ticket_id = $1', [doc.id]);
    for (const c of doc.chunks) {
      await query(
        'INSERT INTO ticket_embeddings (ticket_id, seq, embedding, content, revision) VALUES ($1, $2, $3::vector, $4, $5)',
        [doc.id, c.seq, JSON.stringify(c.embedding), c.content, batch.revision]
      );
    }
  }
  return { stored: batch.docs.length };
}
```

如何运作,简而言之:

-   **你的存储是分类账.** 因为 `GET` 反加入您自己的嵌入表, 泵具有一元能和相撞耐性: 中途死亡的跑会发现同样的行等待下一次.
-   **触发器会合.** 部署插孔每个使用例(初始回填), `emit()` 匹配的事件 `on:` 插针, `cron` 月台扫荡了所有被扫荡的东西 人工跑步直接声称是同一个单机租赁,因此没有双机套.
-   **失败是有限度的.** 由于某种原因失败的跑步可能不会以翻倍的延迟击中(一个提供者的blip,一个处理器的超时),并在连续5次失败后停放;一个无法成功即位(一个被拒绝的密钥,一个耗尽的预算,一个违反合同)的跑跑跑会同时被停放. 每个 Park 保留在使用大小写状态行上的出错;下一个触发器会给它再一个尝试,成功的运行会重置计数.
-   **`revision` 是无效的.** 抽水机的绳子 使你和你的配置相配(切入配置 预算 ), `config.revision`)到已解决的平台嵌入模型. 放在每个向量旁边,然后比较一下 `GET`: 接通配置, 改变块, 或者一个管理员将嵌入模型的所有表面重新定位为待再嵌入的工作 .
-   **墓碑上刻有无法嵌入的文件** 平台侧以内容散列并重新报告 `skipped: true` 在每跑一跑的时候,请在自己的桌子上盖上盖章,并把他们排除在外 `GET`。 。 。 .
-   **工作空间 pgvector.** 具有嵌入能力的应用程序得到 `vector` 在服务器可能创建扩展时提供扩展名( 否则部署日志会命名原因并使用 `vector` 类型失败,所以迁移可以声明真实 `vector(...)` 栏; `ON DELETE CASCADE` 外国钥匙是清理的故事.
-   **腾讯时间.** 每个处理器袋(`server/`, (中文(简体) ), `webhooks/`, (中文(简体) ), `tools/`, (中文(简体) ), `mcp/`获得 `embed(name, text)`返回时 `{ embedding, revision }`。 。 。 . `name` 必须是一个公开的使用案例。 在修改和按距离排序时进行过滤——在存储的行仍在旧行中时,重新指定嵌入模型的管理员会将您的查询向量放入一个新的空间,以及未过滤的 `ORDER BY` 然后无任何错误地返回近似随机的邻居:

```javascript
const { embedding, revision } = await embed('tickets', q);
const hits = await query(
  `SELECT ticket_id, content
     FROM ticket_embeddings
    WHERE revision = $2
    ORDER BY embedding <=> $1::vector
    LIMIT 10`,
  [JSON.stringify(embedding), revision]
);
```

-   **计费.** 嵌入调用帐单到App,每批最多128个块的用法条目,无论提供商请求在下面运行多少;泵计算表与App的计算预算相比.
-   **`config` 读作文字.** 部署升降机 `export const config = { … }` 出出源并评价其范围中没有文件的导入,因此必须自成一体:没有导入常数,没有导入对象的分布,没有 `export { config }` 再出口。 其他模块可能从使用大小写文件中导入文字;反向失败部署. 同一自足的文法规则适用于: `export const config`, (中文(简体) ), `schema`,以及 `description` 内 `server/`, (中文(简体) ), `webhooks/`, (中文(简体) ), `tools/`,以及 `mcp/`; 有一个 `config` 违反时失败部署 `schema` 或者说 `description` 违反是部署警告(该导出没有发布).

### 开发环路

`npm run deploy` 上传 `embeddings/` 和任何其他源树一样——没有显示的块可以添加(plugin ^ 2.1.0;更早的版本从不上传文件夹,因此在服务器上没有静默的使用大小写). `npm run dev` 从来没有运行泵, 及其 `embed()` 扔出一个解释而不是嵌入( dev 镜像报告) `platform.capabilities.embeddings: false`),因此对已部署的 App.插件 ^ 2.1.20. 可以选择 : `informer({ mock: { platform: { capabilities: { embeddings: true } } } })` 绑定 dev `embed()` 到部署的App's `_embed` 配置服务器上的路由(由 package.json 地址) `informer.id`; dev 证书需要写入该 App 的访问权限, 并且每个呼叫都向它计费), 因此查询向量下 `npm run dev` 是部署的一个——相同的型号,相同的 `revision`人身保护令不是: `query()` 仍然读取 Dev 工作空间数据源, 泵从不给它写, 因此一个搜索路径可以比较一个部署的向量相对于本地行. 特征检测 `platform?.capabilities?.embeddings` —— 说 `typeof embed === 'function'` 两者都一样,因为无论哪种方式都有约束力。 然后,在App 管理员面板中 **嵌入层** 选项卡列出每个使用大小写及其泵状态(排队、运行、更新、上次运行、上次出错、跳出文件)和 a **快点跑** 动作; 与 API 路由存在相同的表面(`GET /apps/{id}/embeddings`, (中文(简体) ), `POST /apps/{id}/embeddings/{name}/_run`) (中文(简体) ). 部署 运行 读出错误 修复 重复.

### 升级已经拥有的 App `embeddings/` 文件夹

`embeddings/` 是一个来自 Informer 2026.1.3 的服务器侧文件夹, 例如 `server/`:其文件被上传到库中,从未为浏览器服务,并被扫描为泵处理器. 一个将其它东西(资产,数据文件)保存在那里的App,在使用插件 2.1.0 或稍后重新部署后会丢失浏览器中的文件. A 类 `.js` 文件中的导出 `GET` 或者说 `POST` 但并非两者都未能完成部署; 出口也从未被扫描过作为使用案例, 并成为对否则成功的部署的警告。 在升级前将此类内容移到别处; 将每个出错条目的名称作为警告 .

### 老年前释放

这个 `embeddings/` 文件夹, `embed()`,而泵道仅存在于Informer上释放出该特性. 也必须在旧服务器上运行的具有可选链条功能的App(`platform?.capabilities?.embeddings` 在操作袋上, `window.__INFORMER__.platform?.capabilities?.embeddings` )——2026.1.3前放出"不" `platform` 完全没有描述,所以是赤裸的 `platform.capabilities.embeddings` 扔到那里而不是报告 `false`。它以 `-- requires: embeddings` 在页眉中跳过移出 pgvector 不在的地方,并显示一个地板 `informer.yaml` (单位:千美元)`requires: { informer: '>=…' }`),只有在没有特征的情况下无法工作.

全文参考: **嵌入层** 条目.

## 常见问题

### @entrinsik/vite-plugin-informer 是什么？

Informer App 开发的 Vite 插件和部署工具

### 如何安装 @entrinsik/vite-plugin-informer？

在项目目录运行 npm install @entrinsik/vite-plugin-informer，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：vite（\>=5\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 informer-ci、informer-init、informer-deploy、informer-publish、informer-workspace、create-magic-report，可以用 npx informer-ci 直接运行。

### @entrinsik/vite-plugin-informer 支持 TypeScript 吗？

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

### @entrinsik/vite-plugin-informer 支持 ESM 还是 CommonJS？

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

### @entrinsik/vite-plugin-informer 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @entrinsik/vite-plugin-informer 可以商用吗？

@entrinsik/vite-plugin-informer 使用 UNLICENSED 许可。作者声明为 UNLICENSED，即不授予公开使用许可（与公共领域的 Unlicense 不同）。使用前需获得作者授权。以上为概括，不构成法律意见，请以许可原文为准。

### @entrinsik/vite-plugin-informer 的下载量有多少？

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

### @entrinsik/vite-plugin-informer 还在维护吗？

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

