@davstack/cli-utils (英语)
由 Davstack 守护进程包共享的 0-dep CLI 脚手架(logs-server, (中文(简体) ), vitest-server) (中文(简体) ).
为什么
- 斯克驱动的CLI. 宣布动词+旗帜+位置+子命令为一树;解析,
--help,退出代码 (0 ok / 1 处理器出错 / 2 使用) 自动退出 . - 共享配置解析器 .
findRepoRoot+ 键findToolConfig给每个davstack守护进程相同的<repo-root>/.davstack/config/<tool>.config.ts找找,带有git-root + 工作空间标记后退. - 零跑道岔. 纯TS,没有指挥官/亚尔格/citty. 船舶作为来源——消费者通过
bun或者说node --experimental-transform-types。 。 。 .
安装
pnpm add @davstack/cli-utils
仅存图书馆-无 bin从您守护进程的条目文件中获取 .
用法示例
import { defineCli, type CommandSpec } from "@davstack/cli-utils"
import { findToolConfig } from "@davstack/cli-utils/config"
const serve: CommandSpec = {
description: "Boot the daemon",
flags: {
port: { type: "number", default: 5179, env: "MYTOOL_PORT" },
host: { type: "string", default: "127.0.0.1" },
},
run: async ({ flags }) => {
const configPath = findToolConfig("mytool") // <repo>/.davstack/config/mytool.config.ts
// ... boot server using flags + (optional) config file
return 0
},
}
const cli = defineCli({ name: "mytool", description: "My daemon", commands: { serve } })
process.exit(await cli.run(process.argv.slice(2)))
$ mytool serve --port 6000 # flag wins over env wins over default
$ mytool serve --no-some-bool # boolean negation
$ mytool --help # auto-generated help tree
出口
| 子路径 | 来源 | 表面 |
|---|---|---|
@davstack/cli-utils | src/cli.ts | defineCli, (中文(简体) ), parseArgs, (中文(简体) ), coerceFlag, (中文(简体) ), CommandSpec, (中文(简体) ), CliSpec, (中文(简体) ), FlagSpec |
@davstack/cli-utils/help | src/cli-help.ts | formatHelp(commandPath, spec) |
@davstack/cli-utils/config | src/config.ts | findRepoRoot(start?), (中文(简体) ), findToolConfig(toolName, cwd?) |
类型签名以源为单位——读取而不是再作记录. 实际消费者: packages/logs-server/src/index.ts, (中文(简体) ), packages/vitest-server/src/index.ts。 。 。 .