NAC_Blockchain/nac-webdev-init/src/main.rs

76 lines
1.8 KiB
Rust

use clap::{Parser, Subcommand};
use colored::*;
use std::path::PathBuf;
mod template;
mod generator;
mod validator;
#[derive(Parser)]
#[command(name = "nac-init-web")]
#[command(about = "NAC Web项目初始化工具", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// 创建新的Web项目
New {
/// 项目名称
name: String,
/// 模板类型 (react-default, react-ts, vue-default, wallet, exchange)
#[arg(short, long, default_value = "react-default")]
template: String,
/// 输出目录
#[arg(short, long)]
output: Option<PathBuf>,
},
/// 列出可用模板
List,
/// 验证项目宪法合规性
Check {
/// 项目路径
#[arg(default_value = ".")]
path: PathBuf,
},
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::New { name, template, output } => {
println!("{}", "🚀 NAC Web项目初始化工具".bright_cyan().bold());
println!();
let output_dir = output.unwrap_or_else(|| PathBuf::from(&name));
generator::generate_project(&name, &template, &output_dir)?;
println!();
println!("{}", "✅ 项目创建成功!".bright_green().bold());
println!();
println!("下一步:");
println!(" cd {}", name);
println!(" npm install");
println!(" npm run dev");
}
Commands::List => {
template::list_templates();
}
Commands::Check { path } => {
validator::check_project(&path)?;
}
}
Ok(())
}