@brickkit/cli

中文文档
0.13.1发布于 2026/11/07MITTypeScriptES Module构建来源已验证近 30 天下载 4417

Brick-TS 的 CLI 和服务器引擎

中文使用文档
文档目录8 节
  1. 图标
  2. 本地仪表板
  3. 生产监测仪表板
  4. 行动路线
  5. 编译器
  6. 自动输入 Vite 客户端
  7. 生成没有 Vite 的输入客户端
  8. 协调后端和前端开发

@brickkit/ cli (英语)

Brick-TS框架的CLI和服务器引擎. 登山服务, 动作,以及资源作为带有 OpenAPI 3.1 的 HTTP API (Elysia) 键入, Scalar/Swagger 文档,请求伐木,和 MCP 路径.

晚点要买一分钱.

bun add @brickkit/cli @brickkit/core
import { brick } from "@brickkit/core";

const app = brick({ title: "Pages API", version: "1.0.0" });
app.listen(3333);

图标

每一个命令除了 dev 财务报告和审定财务报表 start 需要一个 <entry>: 模块 默认导出为 BrickApp 不调用 .listen()。 。 。 .

brick dev [entry] [--port 4000] [--dashboard-port 9400] [--history-days 90] [--no-dashboard]
brick start [entry] [--port 4000]
brick build <entry> [--outdir dist/brick] [--port <number>] [--no-aot]
brick worker <entry>
brick gen openapi <entry> [--output openapi.json]
brick gen client <entry> [--output _brick/contract.ts]
brick info <entry>

直接从注册服务构建后端 :

import { brick } from "@brickkit/core";
import { pagesService, billingService } from "./services";

const app = brick({ services: [pagesService, billingService] });

键入的 HTTP 客户端可以从 @brickkit/core/client见 已键入客户端指南 用于路由和 处理错误 .

这个 brick 本包中的二进制舰只,用于本地的dev和检查. dev 财务报告和审定财务报表 start 接受可选条目并解析端口 --port,则 PORT,然后4,000:

brick dev --port 4000
brick dev src/app.ts --port 4000
brick gen openapi src/app.ts --output openapi.json
brick gen client src/app.ts
brick info src/app.ts

资料来源: https://github.com/get-brickkit/brick 页面存档备份,存于互联网档案馆。 。 。 .

本地仪表板

brick dev 设有条目,也可在 http://127.0.0.1:9400它列出了运行中的请求,显示瀑布有: 每个请求的动作和远程呼叫跨度, 收集失败和重装, 包括启动崩溃。 直播视图在同一会话内重新启动.

请求只来自选择加入的应用程序 telemetry: true。 。 。 . brick dev 当仪表板打开时警告,但条目没有设置:

const app = brick({ services: [pagesService], telemetry: true });
brick dev src/app.ts                          # dashboard on 9400
brick dev src/app.ts --dashboard-port 9500    # another port
brick dev src/app.ts --history-days 30        # keep a month of requests
brick dev src/app.ts --history-days 0         # live requests only, nothing on disk
brick dev src/app.ts --no-dashboard           # API only

仪表盘是反应应用程序 packages/cli/dashboard,以 Tailwind 为样式 和阴影组件. bun run --filter @brickkit/cli build 把它捆起来 dashboard-dist, 包装( 大约 2 MB, 大部分是 API) 引用,仅在 APIs 标签打开时加载). 见 packages/cli/dashboard/README.md。 。 。 .

Overview 标签将应用绘制为客户端、服务和数据库的图表, 包含每个服务的动作和工具以及每个数据库的名称、引擎和 图表。 电话、时间和保健都来自最近的请求。 下边是 每一个 HTTP 路径及其动作和最近的请求和失败计数 利用它们的数据库和资源提供服务。 SQL 语句显示为子 横跨在运行它们的动作下,声明文本被悬浮。 西班牙语 按类型排列:请求、动作、服务呼叫和SQL.

APIs 选项卡将应用程序的 OpenAPI 文档与 Fumadocs OpenAPI 在 仪表板的颜色,所以应用程序没有提供自己的参考页面. 侧边栏 以标签方式列出每个文档的操作, 并带有过滤器; 打开的则显示其 参数、响应和实例请求,默认为 JavaScript fetch。尝试在 Playground 中通过仪表盘向应用程序发送调用 app是另一个来源),所以此调用也出现在请求标签中,并且 反应随应用程序的追踪而来(当 telemetry ——错误,当错误发生时,其堆栈跟踪 应用程序扔出一个, 和跨度。 仪表板只向显示的应用程序转发. 第一个文件是应用程序的,在什么时候被排除在外 docs 实值 false· ; reference.documents 添加更多, 每个标题和一个 OpenAPI 文档或函数返回一个(例如更好的 Auth ) auth.api.generateOpenAPISchema()) (中文(简体) ). 丢出的文件被跳过 警告 警告他们. reference 仅服务 Scalar 页 true 或带有 path。 。 。 .

Docs 标签显示应用程序的开发者文档: 由 .md编号 :.mdx fumadocs 版式中的页面( 前题, meta.json,文件夹组),设置为 documentation 打开 brick()它只出现在设定它的应用上 .

// src/app.ts, with the docs in docs/ at the project root
const app = brick({
  services: [pagesService],
  documentation: "../docs", // or { dir: "../docs", components: "../docs/components.tsx" }
});

相对路径从应用程序条目的文件夹开始, 因为他们在文件中读到: 设置它们. fumadocs-core 构建页面树并搜索,以及 @mdx-js/mdx 汇编 页面。 两者都是可选的对等方,只有在 documentation 设置;没有 标签上写着要安装什么(bun add -d fumadocs-core @mdx-js/mdx) (中文(简体) ). 保存文件更新标签 。 页面可以不用 Fumadocs 组件 导入它们( Callout、 Cards、 Tabs、 Steps、 Annions、 文件、 TypeTable、, 内置TOC, Banner),以及 components 命名您自己的反应组件的模块 添加,该仪表盘捆绑。 页面与本地图像之间的链接是 他们做一个文件网站。 见 packages/cli/dashboard/README.md。 。 。 .

对于有工作流程收听器的应用程序, Workflows 标签会显示 Workflow SDK 的 与CLI一起来的探长 因为这个应用在世界上运行 应用软件服务于一个 其自己的回转端口和仪表板在 /workflows。 。 。 . 它可以取消运行,所以只有 brick dev 只有仪表板自己的 页面可能会通过它改变任何东西.

日志标签列出哪些动作、工具和端点的日志 ctx.logger,以及 他们用什么印刷 console.log, (中文(简体) ), info, (中文(简体) ), warn, (中文(简体) ), error,以及 debug,最新数据 先说 下 brick dev 在追踪请求运行为跨度时写入行 因此,它显示在此处和请求的细节中,而不是 已打印过. brick start 只在应用程序设置时才做同样的 dashboard 选项(见下文);否则将不记录或更改任何内容,同时将两者打印为 常规。 请求外的行仍然打印。 这需要 telemetry 继续 线条是 截取了4000个字符 长度保持了第一个100个字符.

为了找到一条线:必须全部出现的话, "an exact phrase", (中文(简体) ), -word 改为 留下线条,和 level:, (中文(简体) ), route:, (中文(简体) ), action:, (中文(简体) ), method:,以及 trace: 页:1 线条的一部份( 任何部分都可以用 -) (中文(简体) ). 匹配被标记, 级别 按钮计算匹配的种类, 5m / 15m / 1h 限制返回的距离, 暂停 保持名单不变。 指向一行复制,只显示其请求,或者 打开它.

请求标签是应用程序所服务的请求的日志 。 选择现场 用于本次运行,或从1小时到90天不等的回想,或自定义命名 一个开始和第二个结束(或今天,昨天,最后15分钟)。 四个 显示牌 请求的计数、出错率、中位持续时间和列表中最慢的5% 显示,所以它们会跟随范围和过滤器。 下方的时间表显示音量 左边的过滤器显示一个数 除每个值(结果、服务、方法、路线和速度 ),和搜索框匹配路线、路径、动作, 和失败信息。 每行显示时间、方法和状态、路线、长度 和处理它的行动 或它为什么失败。 打开一行看 列表外的请求 : 当它开始时, 它运行时, 它是如何结束的, 错误 并堆积追踪,如果它失败, 和它的跨度的瀑布。 导出保存 过滤请求为 CSV .

完成的请求默认保存在运行间90天的磁盘上, 以 .brick/telemetry.sqlite 在项目文件夹中. .brick/ 无视自己,所以它 从来没有承诺。 历史用途 bun:sqlite 包和下 node:sqlite 下级 节点(22.5或更后);没有任何节点,仪表板只使用活数据运行 这么说的 以重启方式中断的请求无法保存 。 最多10万个 请求,放弃最老的第一。 存储请求包括期限,其中 携带 SQL 语句文本、 错误消息和堆放痕迹, 所以处理 .brick/ 作为 你会的日志。 使用 --history-days 0 不留任何东西,或者 删除 .brick/ 重新开始.

发送W3C的请求 traceparent 信头加入呼叫者的追踪器 仪表盘显示他们在追踪的识别码下.

生产监测仪表板

brick start 提供运行中的应用程序的只读仪表板, 从条目中默认导出,设置 dashboard 选项 :

export default brick({
  services,
  dashboard: {
    port: 9400, // its own port, apart from the app's
    host: "0.0.0.0", // 127.0.0.1 unless set
    auth: { token: process.env.DASHBOARD_TOKEN, authorize },
    historyDays: 0, // finished requests kept on disk, in .brick/
  },
});

它在自己的港口听, 所以它可以保持私人或安装在另一个港口 地址,它会回答,而应用程序的路径则不会。 它显示请求,日志, 错误、 概览和再加载; 没有重新启动、 API 代理、 API 、 Docs 或 Workflows, 以及 未提供 OpenAPI 文档 。 转弯 telemetry 从那时起 ctx.logger 财务报告和审定财务报表 console 请求时所写的行前往仪表板 而不是到容器的操纵台.

除了回放之外,还需要控制出入,以及 brick start 不运行 仪表板没有它. auth.token 是秘密(或数个,要旋转),至少 16个字符:浏览器在其登录的提示(任何用户名 ,并发送监视器 Authorization: Bearer <secret>。 。 。 . auth.authorize(request) 是你自己的支票,因为应用程序的认证已经 (Better Auth, Clark, a header from a 代理服务器):它得到了一个标准 Request 无 尸体和返回 true, (中文(简体) ), false,或一个 Response 例如重定向到登录 页面; 以503拒绝请求的投出或5秒无答. A 类 请求带有有效符号或当 authorize 允许它.

GET /_health 在仪表板端口上不需要签入:200,而应用程序回答 其本身 /_health,503 当它没有, 用于时间显示器。 答复是: no-store,带有严格的内容-安全政策和 X-Frame-Options: DENY· ; 把它交给HTTPS 失败的登录不限制速率, 因此使用长随机 标志 仪表板在应用的流程中运行: 它能活过处理者的错误, 而不是过程死去. brick dev 拥有自己的仪表板 并忽略选项.

仪表盘绑起 127.0.0.1 并拒绝其下列请求: Host 页眉是 不是当地人 它不记录请求的尸体或信头。 错误消息, 堆栈 痕迹,SQL语句文本可以被任何能够打开仪表板的人所看到.

行动路线

每个动作都暴露出一条路线: method 默认为 POST,以及 path 默认为 /api/{service}/{action} (或您配置的前缀). 明确 方法无论动作名称如何都会被尊重. 习惯 path 包含 它自己的前缀并替换默认路径。 OpenAPI 描述的相同 方法和路径,包括路径参数.

要曝光读取的动作,请声明 method: "GET"开始动作名称 与 get, (中文(简体) ), list, (中文(简体) ), find,或 read 不再添加获取的别名。 自定义路径无 更长的显示默认动作别名或一种附加方法。 资源 CRUD 路由保持他们的REST方法.

编译器

服务器为所有资源 CRUD 编译专门的 JavaScript 处理器 启动时的自定义动作、 预发文档以及缓存 OpenAPI 和 架构 JSON 有定义/端点无效。 保持生命健康 时间和时间戳。 构建一个 默认导出为 a BrickApp 输入一个可运行的 Bun 服务器, 使用 :

brick build src/app.ts --outdir dist/brick
bun dist/brick/server.js

使用相同的应用程序条目 brick gen client。该建筑保留其选定的 服务,前缀,docs设置,端点,和爱丽西亚钩. 保留 .listen() 在一个单独的服务器靴子.

这个β树枝会把爱丽西亚接上 2.0.0-beta.29。 。 。 . brick build 也预编译 Elysia 的 HTTP 处理器及其 Bun AOT 插件并删除运行时间 HTTP 编译器. 使用 brick build src/app.ts --no-aot 一个普通的捆绑. 发展与直接 brick() 调用仍然使用运行时间 HTTP 编译; 两种模式都共享相同的服务,并共享砖处理器.

自动输入 Vite 客户端

添加 brickClient 在框架插件之前。 它的条目可以是任何模块 默认导出为 BrickApp; 不调用构建应用程序 .listen() 这里:

// src/api/app.ts
import { brick } from "@brickkit/core";
import { pagesService } from "./services";

export default brick({ prefix: "/v2", services: [pagesService] });
// vite.config.ts
import { brickClient } from "@brickkit/cli/vite";

export default defineConfig({
  plugins: [
    brickClient({ entry: "./src/api/app.ts" }),
    // TanStack Start, React, or other framework plugins
  ],
});

虚拟创建 _brick/contract.ts 装入前端和前端 生产建设。 前缀和所选服务来自应用程序. 后端 编辑重生成文件;未修改的元数据不重写. 没有 单独生成命令或手动维护的动作列表.

// src/client.ts
import { createBrickClient } from "@brickkit/core/client";
import { contract } from "../_brick/contract";

export const api = createBrickClient({
  baseUrl: "http://localhost:8085",
  contract,
});

生成的文件包含传输类型和路由元数据, 没有运行时间 进口或后端处理器。 HTTP 动作按服务名称分组; 点 动作名称成为嵌入式命名空间。 资源使用他们的名字 以及他们正常的REST路线. 不包括只使用MCP的工具。 添加 _brick/ 改为 .gitignore; 自定义其位置 output 在插件选项中.

给谭斯塔克 启动或另一个嵌入式服务器,从 virtual:brick-app 在服务器代码和转发请求中 app.fetch(request)。 。 。 . Vite 跟踪条目及其后端热重装的依赖性 。 浏览器 拒绝导入此服务器模块。 添加 /// <reference types="@brickkit/cli/vite/client" /> 到您的虚拟环境 声明。 见 examples/pages (原始内容存档于2018-03-26). Fart Introduction.

期间 vite dev 该插件还服务于本地仪表板 http://127.0.0.1:9400。通过 dashboard: { port } 移动它或 dashboard: false 把它关掉. dashboard: { historyDays } 设定天数 将请求保留在 .brick/ (默认 90; 0 for no). 应用程序必须保持 通过 telemetry: true 改为 brick(). TanStack Start等Dev服务器与Nitro一起运行应用程序 因此插件导入一个记者 virtual:brick-app 发送 工人的跨度通过回回回式HTTP到仪表板. 历史留在 维特过程和生存 工人重启。 如果采取端口, Vite 开始 没有仪表板和记录一个警告。 仪表板无法重新启动应用程序 在此模式下,它会隐藏按钮.

生成评价应用程序条目,所以它需要构建的配置 应用程序必须在开发时和建设时提供。 保留启动任务 在请求处理器或服务器中打开初始化 靴子,在应用程序定义模块之外 投入/产出类型 来自JSON运输计划; 缺少计划生产 unknown未解决 schema 引用和非 JSON 运输类型 故障生成明确. 此集成需要 Vite 8; 普通服务器入口没有 Vite 运行时间依赖. generateClientContract(app) 曝光源生成器 用于非虚拟工具.

生成没有 Vite 的输入客户端

使用带有默认导出为 a 的任何模块的独立 Bun CLI BrickApp数字 :

brick gen client src/app.ts
brick gen client src/app.ts --output frontend/src/contract.ts

默认输出为 _brick/contract.ts,相对于工作目录. 该应用程序的选定服务和前缀决定其内容,就像 维特插件. 命令在不调用的情况下评估条目 .listen(); 保留 在单独的服务器靴子上的听众。 不需要或装入 Vite .

重复运输类型的碎片按共享方式排放 BrickSchema_* 别名 当声明缩小源大小时。 名称来源于所排放的 形状,所以像字符串长度约束这样的只运行时约束不能防止 共享。 Scalars 保持内线,参考目标保留文档范围 别名; 单独文档中的等同递归图仍然分开. 这既适用于独立一代,也适用于维特一代.

在您前端的开发服务器前运行生成、 构建和类型检查, 并修改后端定义后重新运行。 您可以添加软件包脚本 :

{
  "scripts": {
    "gen:client": "brick gen client src/app.ts"
  }
}

导入生成 contract 与 createBrickClient({ baseUrl, contract }) 如上所示。 命令创建父目录并留下一个不变的 合同文件未更改。 将生成的输出添加到 .gitignore。 。 。 .

协调后端和前端开发

对于单独的前端工具,请在其编译器开始前生成合同:

brick dev src/app.ts --client frontend/src/contract.ts --frontend 'bun run --cwd frontend dev'

应用程序条目必须默认导出 BrickApp 而不调用 .listen()。 。 。 . Brick生成初始合同,启动前端命令一次 在编辑时重新启动后端。 输入条目外的本地依赖性 目录也被监视。 重新启动前更改组合; 每次重新启动评价 应用程序在新流程中,并在启动服务器前生成合同. 世代失败保留了以前的合同并打印出错误. 下一个 有效的编辑重试。 停止中 brick dev 停止它的后端和前端的孩子. 当你停下来 brick dev 随着Ctrl-C或它重新装入,后端首先完成在飞行中事件交付(最多为3秒);一次第二个Ctrl-C出站. 在Windows上,停止或重新加载后端会强制终止它,因此飞行中的事件交付可能会被中断. --client 也工作没有 --frontend 如果另一个进程拥有前端.

对于Pages等嵌入式Vite应用程序,请继续使用 brickClient 内 vite.config.ts。 。 。 . Vite拥有后端加载和前端启动在那个设置中. 它会生成之前 启动和生产编译,重新加载应用程序定义图,包括导入的服务例,并通过其终端和浏览器覆盖报告生成错误. 错误发生后有效的编辑重生合同 。 两者结合在解剖学上都是 替换已更改的合同并保存未更改的文件,因此只执行 编辑不会触发前端合同更新. 生成的文件不包括在 复生触发.

用于非Vite生产建筑和类型检查,运行 brick gen client 作为第一个 命令。 它使用相同的发电机和原子 作家作为发展。 在应用程序定义之外保留启动的工作和听众, 因为所有世代的路径都评价这个条目.

版本与发布记录

@brickkit/cli 共发布 35 个版本,首次发布于 2026/10/08;过去 12 个月发布了 35 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.13.1latest2026/11/071 天前
0.13.02026/11/071 天前
0.12.02026/11/053 天前
0.11.02026/10/309 天前
0.10.02026/10/309 天前
0.9.12026/10/2613 天前

其他发布通道:beta → 0.3.0-beta.5。

关于 @brickkit/cli 的常见问题

@brickkit/cli 是什么?

Brick-TS 的 CLI 和服务器引擎

如何安装 @brickkit/cli?

在项目目录运行 npm install @brickkit/cli,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 brick,可以用 npx brick 直接运行。

@brickkit/cli 支持 TypeScript 吗?

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

@brickkit/cli 支持 ESM 还是 CommonJS?

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

@brickkit/cli 可以商用吗?

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

@brickkit/cli 的下载量有多少?

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

@brickkit/cli 还在维护吗?

最新版本 0.13.1 发布于 2026/11/07(1 天前);至今共发布 35 个版本,其中过去 12 个月发布了 35 个;首次发布于 2026/10/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。