命令行界面开发 domain-cli

本技能专注于使用Rust语言构建高效、用户友好的命令行界面工具。涵盖参数解析、配置管理、进度显示、错误处理、终端UI等核心领域。关键词:Rust CLI,命令行工具,参数解析,终端应用,clap,ratatui,indicatif,配置管理,用户体验,自动化脚本。

后端开发 0 次安装 0 次浏览 更新于 2/27/2026

name: domain-cli description: “用于构建CLI工具时使用。关键词:CLI,命令行,终端,clap,structopt,参数解析,子命令,交互式,TUI,ratatui,crossterm,indicatif,进度条,彩色输出,shell补全,配置文件,环境变量,命令行,终端应用,参数解析” globs: [“**/Cargo.toml”] user-invocable: false

CLI 领域

第3层:领域约束

领域约束 → 设计影响

领域规则 设计约束 Rust 实现
用户体验 清晰的帮助和错误信息 clap 派生宏
配置优先级 命令行 > 环境变量 > 配置文件 分层配置加载
退出码 错误时返回非零值 正确的 Result 处理
标准输出/错误输出 数据 vs 错误 使用 eprintln! 输出错误
可中断性 处理 Ctrl+C 信号处理

关键约束

用户通信

规则:错误输出到 stderr,数据输出到 stdout
原因:支持管道输出,可脚本化
RUST:使用 eprintln! 输出错误,println! 输出数据

配置优先级

规则:命令行参数 > 环境变量 > 配置文件 > 默认值
原因:用户期望,支持覆盖能力
RUST:使用 clap + figment/config 进行分层配置

退出码

规则:任何错误时返回非零值
原因:脚本集成,自动化
RUST:main() -> Result<(), Error> 或显式 exit()

向下追踪 ↓

从约束到设计(第2层):

"需要参数解析"
    ↓ m05-类型驱动:为参数派生结构体
    ↓ clap: #[derive(Parser)]

"需要配置分层"
    ↓ m09-领域:配置作为领域对象
    ↓ figment/config:分层数据源

"需要进度显示"
    ↓ m12-生命周期:进度条作为 RAII
    ↓ indicatif:ProgressBar

关键库

用途
参数解析 clap
交互式提示 dialoguer
进度条 indicatif
彩色输出 colored
终端用户界面 ratatui
终端控制 crossterm
控制台工具 console

设计模式

模式 目的 实现
参数结构体 类型安全的参数 #[derive(Parser)]
子命令 命令层次结构 #[derive(Subcommand)]
配置分层 覆盖优先级 CLI > env > file
进度 用户反馈 ProgressBar::new(len)

代码模式:CLI 结构

use clap::{Parser, Subcommand};

#[derive(Parser)]
#[command(name = "myapp", about = "我的 CLI 工具")]
struct Cli {
    /// 启用详细输出
    #[arg(short, long)]
    verbose: bool,

    #[command(subcommand)]
    command: Commands,
}

#[derive(Subcommand)]
enum Commands {
    /// 初始化新项目
    Init { name: String },
    /// 运行应用程序
    Run {
        #[arg(short, long)]
        port: Option<u16>,
    },
}

fn main() -> anyhow::Result<()> {
    let cli = Cli::parse();
    match cli.command {
        Commands::Init { name } => init_project(&name)?,
        Commands::Run { port } => run_server(port.unwrap_or(8080))?,
    }
    Ok(())
}

常见错误

错误 领域违规 修复方法
错误输出到 stdout 破坏管道功能 使用 eprintln!
没有帮助文本 用户体验差 #[arg(help = “…”)]
错误时 panic 退出码错误 Result + 正确处理
长时间操作无进度 用户不确定 使用 indicatif

追踪到第1层

约束 第2层模式 第1层实现
类型安全参数 派生宏 clap Parser
错误处理 Result 传播 anyhow + 退出码
用户反馈 进度 RAII indicatif ProgressBar
配置优先级 构建器模式 分层数据源

相关技能

何时使用 参见
错误处理 m06-错误处理
类型驱动参数 m05-类型驱动
进度生命周期 m12-生命周期
异步 CLI m07-并发