校对:soup
Chamvi 命令行: dev, 构建, 启动( 并启动 -- check), 运行和迁移, 用于构建一个应用 @ chamvi/ app (中文(简体) )。 。 。 .
安装
npm install @chamvi/app @chamvi/cli ai
npm install --save-dev tsdown # only for chamvi build
使用量
应用程序是一个条目, src/index.ts,其默认导出为 createApp() 从 @ chamvi/ app (中文(简体) )数字 :
import { createApp } from '@chamvi/app';
import { echo } from './agents.ts';
export default createApp({ agents: [echo] });
package.json 脚本 :
{
"type": "module",
"scripts": {
"dev": "chamvi dev",
"build": "chamvi build",
"start": "chamvi start"
}
}
相对进口 .ts 没有 enum这样 chamvi dev (节点类型去除)和 chamvi build (tsdown) 接受相同的代码. 模板 tsconfig.json数字 :
{
"compilerOptions": {
"target": "ES2023",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"skipLibCheck": true,
"verbatimModuleSyntax": true,
"allowImportingTsExtensions": true,
"erasableSyntaxOnly": true,
"noEmit": true
},
"include": ["src", "test"]
}
图标
chamvi <command> [args] [flags]附加时 --help 财务报告和审定财务报表 --version。每个命令需要 --entry <path>。 。 。 .
| 命令 | 参数和旗帜 | 对 |
|---|---|---|
dev | --entry | 运行 node --watch [--env-file-if-exists=.env] <cli> start --dev --entry <source entry>:在条目、其进口或 .env (节点监视掩体文件本身,所以没有) --watch-path a. 导言 洞口旗只在 .env 初始时存在( 在 Linux 上, node --watch 丢失的内存文件失败, 所以 .env 创建后需要重新启动 chamvi dev |
build | --entry, (中文(简体) ), --out-dir <dir> (默认) dist(中文(简体) ) | 将条目套入 tsdown 中 <out-dir>/index.mjs 加上其来源图:无害环境管理, node26,每个 dependencies 财务报告和审定财务报表 peerDependencies 外部软件包,该应用程序自己的模块内含. 输出的目录是先被清空的, 所以其中一个是工程文件夹或上面的, 持有条目, 或持有任何东西, 但是 .mjs 财务报告和审定财务报表 .mjs.map 文件出口 2 |
start | --entry, (中文(简体) ), --check | 启动应用程序:存储(并迁移),引擎及其频道(其中有克龙),再由HTTP. --check 运行相同的启动路径直到启动( s)app.check(): 配置、 存储连接、 模型设置、 每个模块、 代理文件夹的负载和检查) 和退出, 写不给存储( 没有迁移、 修订标记或取消) , 服务不给, 运行不给: chamvi: start check passed 在stdout和出站0上,每个代理文件夹在自己的stderr行和出站2上发布,一个配置错误出站2,一个存储失败(无法访问,待迁移到 CHAMVI_MIGRATE=false出口 1; 默认 CHAMVI_MIGRATE=true 因此,在移民通过之前, 它需要的是一个开始CHAMVI_TOKENS因此,在CI中运行它与生产或中装入的管道。 见 选择一个模型 |
run-job | <agent>, (中文(简体) ), [subscriptionId], (中文(简体) ), --entry | 一次性开出一个 cron 订阅并等待运行( Kubernetes CronJob; 没有频道启动); subscriptionId 代理机唯一订阅的默认值 |
migrate | --entry | 米格拉特斯邮局商店(DATABASE_URL (所需) |
条目是 --entry,其他用于源命令(dev, (中文(简体) ), build, (中文(简体) ), start --dev(b) 与《京都议定书》 package.json 字段 "chamvi": { "entry": "<path>" },则 src/index.ts. 已建命令(start, (中文(简体) ), run-job, (中文(简体) ), migrate)从不读取字段并默认为 dist/index.mjs,所以从一个设置它仍然开始的寄存器中构建的图像; a .ts 条目也通过类型剥离。 没有 --entry,没有 chamvi.entry,没有默认文件, dev, (中文(简体) ), start, (中文(简体) ), run-job 财务报告和审定财务报表 migrate 运行默认的应用程序, createApp({}) 由 env 单独配置,其代理来自 ./agents (或 CHAMVI_AGENTS_DIR),并在stderr上这样说; build 2号出入口(无可建设). 一个不见了 dist/index.mjs 旁边 src/index.ts 仍然退出 2 带有构建提示.
chamvi dev 运行 start --dev:来源条目, .env 从工作目录(绝不凌驾于设定变量之上)中取自 createMemoryStore() 除非 DATABASE_URL 被设定,没有另一个验证器,一个随机 * 以警告和较短的时日为标志CHAMVI_DRAIN_TIMEOUT_MS 5000块, CHAMVI_FORCE_EXIT_MS 1550) (英语).
退出代码
| 代码 | 何时 |
|---|---|
0 | 成功:一个干净的站站,一个已建成的捆绑,一个迁移的商店,一个 start --check 有问题; run-job 用于完成、等待、跳过、排队的后方核准或信号中断运行 |
1 | 运行时失败: 启动、 检查、 构建或迁移出错( 无法访问或待转移的存储) , 失败或取消的工作, 强制退出 |
2 | 用法或配置:未知的命令或旗帜,缺少或没有 chamvi app的条目,缺少或无效的env(名称,其值从未重复),有问题的模型设置,没有模型和默认的代理或没有配置提供者或其软件包缺失的模型字符串,a start --check 找到代理文件夹问题 |
CLI 设定 process.exitCode 并让节点退出; 它调用 process.exit() 仅限强制退出.
信号
start 财务报告和审定财务报表 run-job数字 :
- 第一个SIGTERM或SIGINT停止应用(
/readyz503,HTTP关闭,发动机排出(先停)至CHAMVI_DRAIN_TIMEOUT_MS,存储关闭),然后退出 0,或者当停止报告出错时退出 1. - 第二信号即刻出站一站. 在第一个数的一秒之内发出信号
npm run dev财务报告和审定财务报表npm start两次发送一个Ctrl-C(npm将SIGINT转发到脚本,而终端则信号整个组). CHAMVI_FORCE_EXIT_MS(默认9000)第一个信号后,一站仍然运行出站1.
migrate 安装不处理器:节点默认结束它.
在库伯内特保存 preStop + CHAMVI_FORCE_EXIT_MS < terminationGracePeriodSeconds5 s 时 preStop 睡眠和120 s的宽限期最坏的情况是:5+30 (排水量)+5 (接近)+30 (工作空间)=70 s,强制出站时间为95 s,SIGKILLL为120 s.
chamvi dev 将孩子运行在自己的流程组中,所以一个终端Ctrl-C只达到CLI,它转发一个信号(应用程序然后停止一次,而不是得到终端的SIGINT+一个) node --watch 页:1 SIGHUP(终端关闭)和CLI自己的出站用SIGTERM阻止了孩子,而孩子的stdin只是CLI所写的管子:当CLI在没有出站钩(SIGKILL,OOM杀手)的情况下死亡时,管子关闭并被应用结束整个组,所以它永远不会活过CLI. 退出代码是孩子的,0当它以转发信号结束.
许可证
原载 Apache 许可证 2.0。 。 。 .