@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 作为第一个
命令。 它使用相同的发电机和原子
作家作为发展。 在应用程序定义之外保留启动的工作和听众,
因为所有世代的路径都评价这个条目.