前沿型CLI库——Clipanion
前沿型CLI库——Clipanion
去发现同类优质开源项目:https://gitcode.com/
Clipanion是一款类型安全的命令行接口(CLI)库,其最大的亮点在于它没有运行时依赖项。这款库由type-safe构建,以确保代码的稳定性和可预测性,并在Yarn项目中得到了广泛的应用和验证。
安装与引入
将Clipanion集成到你的项目中非常简单,只需一个命令:
yarn add clipanion
为什么选择Clipanion?
- 高级类型支持 —— Clipanion允许你利用先进的TypeScript特性来定义命令和选项。
- 嵌套命令 —— 支持多级命令结构,如
yarn workspaces list
。 - 无
--
选项代理 —— 无需--
分隔符,可以透明地传递选项。 - 多种选项类型 —— 包括否定、批处理等多种类型。
- Typanion集成 —— 提供强大的选项验证功能。
- 优化的状态机 —— 自动从你的命令生成高效的执行路径。
- 内置帮助页面 —— 自动生成清晰易读的帮助文档。
- 常见命令支持 —— 内置版本和帮助命令。
文档资源
想深入了解Clipanion的使用方法,欢迎访问官方文档网站:mael.dev/clipanion。
迁移指南
如果你正在从Clipanion v2升级到v3,可以借助clipanion-v3-codemod
工具进行快速迁移。
使用示例
创建一个新的命令很简单,只需继承自Command
基类并实现execute
方法:
class SuccessCommand extends Command {
async execute() {
return 0;
}
}
通过paths
静态属性,你可以指定命令对应的命令行路径:
class FooCommand extends Command {
static paths = [[`foo`]];
async execute() {
this.context.stdout.write(`Foo\n`);
}
}
class BarCommand extends Command {
static paths = [[`bar`]];
async execute() {
this.context.stdout.write(`Bar\n`);
}
}
定义选项就像声明普通类属性一样,同时利用Option
命名空间的助手函数进行注解:
class HelloCommand extends Command {
// 位置参数
name = Option.String();
async execute() {
this.context.stdout.write(`Hello ${this.name}!\n`);
}
}
对于选项值的验证和转换,Clipanion集成了Typanion库:
class AddCommand extends Command {
a = Option.String({required: true, validator: t.isNumber()});
b = Option.String({required: true, validator: t.isNumber()});
async execute() {
this.context.stdout.write(`${this.a + this.b}\n`);
}
}
许可证
Clipanion遵循MIT许可证,详细信息见项目底部的许可证文件。
总的来说,Clipanion以其简洁的API、强大的类型系统和零依赖的特性,为开发高效且健壮的CLI应用提供了便捷的解决方案。无论你是经验丰富的开发者还是初学者,都将从它的灵活性和易用性中受益。让我们一起探索并享受编写CLI的乐趣吧!
去发现同类优质开源项目:https://gitcode.com/