CLAUDE.md@by-scenario/cli-tool · git:20260320.fcf2609 · 2026-03-20 · sha256 eedca83272eaedc4
CLAUDE.md@by-scenario/cli-tool git:20260320.fcf2609A
Immutable. This exact content is served forever at /api/v1/blob/eedca83272eaedc4.
# CLI 工具项目规范 ## 项目结构 - `src/cli.ts` - 入口,参数解析和命令路由;`src/commands/` - 子命令 handler - `src/utils/` - 工具函数;`bin/` - 可执行入口,`package.json` 的 `bin` 指向此处 ## 参数解析 - 使用 `commander` 或 `yargs` 处理参数,禁止手动解析 `process.argv` - 所有命令必须支持 `--help` 和 `--version`;布尔取反用 `--no-xxx` - 必填参数用 positional argument,可选配置用 named option - 支持配置文件(`.xxxrc.json`)作为命令行参数的 fallback ## Exit Code 规范 - `0` - 执行成功 - `1` - 一般性错误(参数错误、运行时异常) - `2` - 用户主动取消(Ctrl+C / 交互式取消) - 所有非零退出必须在 stderr 输出错误原因,便于脚本管道组合 ## 输出与日志 - 正常结果输出到 stdout,供管道和重定向使用 - 错误信息、警告、进度提示输出到 stderr - 支持 `--json` 标志输出机器可读的 JSON 格式 - 支持 `--quiet` / `--verbose` 控制日志详细程度 - 终端颜色使用 `chalk` 并检测 `NO_COLOR` 环境变量 ## 跨平台兼容 - 文件路径使用 `path.join()` / `path.resolve()`,禁止硬编码 `/` 或 `\\` - 换行符使用 `os.EOL`,写文件时注意 line ending - 子进程调用使用 `cross-spawn` 代替原生 `child_process.spawn` - 配置文件目录遵循 XDG 规范:优先 `$XDG_CONFIG_HOME`,fallback `~/.config/` - 在 `package.json` 中声明 `engines.node` 最低版本要求 ## 测试与发布 - 每个 command handler 必须有单元测试,mock 掉 I/O 和文件系统 - 集成测试通过 `execa` 调用编译后的 binary 验证退出码和输出 - 入口脚本首行含 shebang `#!/usr/bin/env node`,发布前 `npm pack --dry-run` 检查打包内容