@davstack/cli-utils

中文文档
1.3.2发布于 2026/06/10MITTypeScriptES Module近 30 天下载 1.3万

Tiny CLI helper shared by @davstack/logs-server and vitest-server.

原始使用文档
文档目录4 节
  1. Why
  2. Install
  3. Usage Example
  4. Exports

@davstack/cli-utils

Zero-dep CLI scaffolding shared by the davstack daemon packages (logs-server, vitest-server).

Why

  • Spec-driven CLIs. Declare verbs + flags + positionals + sub-commands as one tree; parsing, --help, and exit codes (0 ok / 1 handler error / 2 usage) fall out for free.
  • Shared config resolver. findRepoRoot + findToolConfig give every davstack daemon the same <repo-root>/.davstack/config/<tool>.config.ts lookup, with git-root + workspace-marker fallbacks.
  • Zero runtime deps. Pure TS, no commander/yargs/citty. Ships as source — consumers run it via bun or node --experimental-transform-types.

Install

pnpm add @davstack/cli-utils

Library-only — no bin. Consume from your daemon's entry file.

Usage Example

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

Exports

SubpathSourceSurface
@davstack/cli-utilssrc/cli.tsdefineCli, parseArgs, coerceFlag, CommandSpec, CliSpec, FlagSpec
@davstack/cli-utils/helpsrc/cli-help.tsformatHelp(commandPath, spec)
@davstack/cli-utils/configsrc/config.tsfindRepoRoot(start?), findToolConfig(toolName, cwd?)

Type signatures live in source — read them rather than re-documenting. Real consumers: packages/logs-server/src/index.ts, packages/vitest-server/src/index.ts.

版本与发布记录

@davstack/cli-utils 共发布 7 个版本,首次发布于 2026/05/26;过去 12 个月发布了 7 个版本。

版本发布日期距今
1.3.2latest2026/06/105 个月前
1.3.12026/05/295 个月前
1.3.02026/05/285 个月前
1.2.02026/05/275 个月前
1.1.12026/05/265 个月前
1.1.02026/05/265 个月前

关于 @davstack/cli-utils 的常见问题

@davstack/cli-utils 是什么?

Tiny CLI helper shared by @davstack/logs-server and vitest-server.

如何安装 @davstack/cli-utils?

在项目目录运行 npm install @davstack/cli-utils,或使用 pnpm add / yarn add / bun add。

@davstack/cli-utils 支持 TypeScript 吗?

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

@davstack/cli-utils 支持 ESM 还是 CommonJS?

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

@davstack/cli-utils 可以商用吗?

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

@davstack/cli-utils 的下载量有多少?

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

@davstack/cli-utils 还在维护吗?

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