@entrinsik/vite-plugin-informer

中文文档
2.14.0发布于 2026/10/23UNLICENSEDTypeScriptES Module近 30 天下载 2103

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

中文使用文档
文档目录7 节
  1. 快开始
  2. 什么部署舰艇
  3. 服务器兼容性
  4. 嵌入层
  5. 开发环路
  6. 升级已经拥有的 App embeddings/ 文件夹
  7. 老年前释放

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

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

快开始

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 tokendev 服务器在运行时更新它. 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之前完全缺席:

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

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

嵌入层

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

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

// 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 然后无任何错误地返回近似随机的邻居:
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 共发布 25 个版本,首次发布于 2026/01/31;过去 12 个月发布了 25 个版本。

版本发布日期距今
2.14.0latest2026/10/2321 天前
2.14.0-beta.0beta2026/10/121 个月前
2.13.02026/09/221 个月前
2.12.02026/09/122 个月前
2.11.02026/09/092 个月前
2.10.02026/09/092 个月前

关于 @entrinsik/vite-plugin-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 和提交记录判断。