跳到主要内容

IGeekFan.FreeKit.CLI

FreeKit 命令行工具,提供基于 Scriban 模板引擎的代码脚手架能力。安装为 .NET Global Tool,命令名 freekit

安装

dotnet tool install --global FreeKit.CLI

# 验证安装
freekit --help

依赖

  • System.CommandLine — 命令行框架
  • Scriban — 模板引擎
  • Serilog — 结构化日志

命令

根命令

freekit [--silent]
选项说明
--silent静默模式,将日志级别提升到 Warning

example — 示例命令

freekit example --title "MyModule" --engines "FreeSql,Redis"
选项必填说明
-t / --title标题文本
-e / --engines引擎名称列表,逗号分隔

代码脚手架(CodeScaffolding)

核心模块 CodeScaffolding 基于 Scriban 模板引擎实现代码生成:

工作原理

  1. 指定模板目录(templatePath)和输出目录(outputDir
  2. 递归遍历模板目录中所有文件
  3. 使用 Scriban 解析文件内容(模板变量注入)
  4. 文件名和内容都支持 {Property} 模板语法
  5. 输出到目标目录

模板文件命名

模板文件默认后缀为 .txt(由 PostFix 属性控制),输出时会去除此后缀:

Templates/
├── {Name}.cs.txt → 输出为 {Name}.cs
├── I{Name}Service.cs.txt → 输出为 I{Name}Service.cs
└── {Name}Controller.cs.txt → 输出为 {Name}Controller.cs

使用示例

var scaffolding = new CodeScaffolding(
templatePath: "./Templates",
outputDir: "../../../Output"
);

await scaffolding.GenerateAsync(new
{
Name = "User",
EntityName = "User",
ModuleName = "Identity"
});

模板文件 {Name}.cs.txt

namespace FreeKit.{ModuleName};

public class {Name}
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
}

生成结果 User.cs

namespace FreeKit.Identity;

public class User
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
}

扩展命令

CLI 基于 System.CommandLine,可轻松扩展新命令:

public class MyCommand : Command
{
public MyCommand() : base("mycommand", "命令描述")
{
var option = new Option<string>("--name", "参数说明");
AddOption(option);
this.SetHandler(async (name, silent) =>
{
// 命令逻辑
}, option, GlobalOptions.SilentOption);
}
}

// 注册到根命令
root.AddCommand(new MyCommand());

配置

appsettings.json

{
"AppOption": {
"TemplatesPath": "./Templates",
"OutputDirectory": "../../../Output"
}
}