76 lines
1.8 KiB
Rust
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(())
|
|
}
|