嗖的一下就码出一个CLI
文章图片
今天呢,准备推荐一个工具丹尼尔: 蛋兄,手头有个任务要开发一个命令行工具,有没快速搞起来的办法
如果你现在没有开发命令行工具的打算
那可以先收藏着
以后,或许,应该会用到吧
蛋先生: 用 ncgen 啊
丹尼尔: 额,这不是开发代码生成器的吗?我这不还没有命令行工具的项目模板嘛
蛋先生: 哦哦,也是,想错了。那看一下《烹饪一道美味的 CLI》 呗,已经把来龙去脉讲得很详细了
丹尼尔: 是很详细,但就是太过详细了,我想要嗖的一下就能搞定那种
蛋先生: 嗖的一下?容我想想,( ̄o ̄) . z Z
丹尼尔: 蛋兄,蛋兄 ...
蛋先生: 想起来了,《烹饪一道美味的 CLI》 有提到啊,就是 oclif 了
丹尼尔: 怎么用呢?假设我现在要开发一个百宝箱工具,就叫 dx-tools 吧
蛋先生: 没问题,首先肯定是要自动初始化工程项目的啦,最低要求了
文章图片
丹尼尔: 哎呦不错,开发的时候昨运行呢?
蛋先生: 简单~
文章图片
丹尼尔: 那现在来给百宝箱工具增加复制的功能吧,如
dx-tools cp
蛋先生: 安排。
dx-tools cp
中的 cp
就是 dx-tools 的子命令 (oclif 称为 command),oclif 也为 command 提供了代码生成工具文章图片
蛋先生: 运行后会生成
src/commands/cp.ts
代码文件。代码长啥样呢,我们等会再看。先运行下看看效果,可以看出已经有 cp
这个子命令了文章图片
丹尼尔: Good!光有 cp 还不行,还得指定参数,像这样子
dx-tools cp source_file target_file
蛋先生: 好咧!
dx-tools cp source_file target_file
中的 source_file
和 target_file
是子命令 cp
的参数(oclif 称为 command arguments)。加参数前我们先看下 cp
默认生成的帮助信息,等会才好看出变化文章图片
丹尼尔: 细心哦~
蛋先生: 前面提到生成的代码文件
src/commands/cp.ts
,这会我们来看下代码。import {Command, Flags} from '@oclif/core'export default class Cp extends Command {
static description = 'describe the command here'static examples = [
' ',
]static flags = {
// flag with a value (-n, --name=VALUE)
name: Flags.string({char: 'n', description: 'name to print'}),
// flag with no value (-f, --force)
force: Flags.boolean({char: 'f'}),
}static args = [{name: 'file'}]public async run(): Promise {
const {args, flags} = await this.parse(Cp)const name = flags.name ?? 'world'
this.log(`hello ${name} from /Users/daniel/Projects/Test/dx-tools/src/commands/cp.ts`)
if (args.file && flags.force) {
this.log(`you input --force and --file: ${args.file}`)
}
}
}
蛋先生: 我们现在需要增加两个参数,小修改下
文章图片
蛋先生: 执行看下帮助信息,看,出来了
文章图片
蛋先生: 再执行下,看看获取参数的效果
文章图片
丹尼尔: Nice!最后我想加个选项,来指定如果目标文件存在,是否进行覆盖。像这样子
dx-tools cp -n source_file target_file
就表示不覆盖蛋先生:
-n
就是可选项,一般在命令行中称为 option,但在 oclif 这里是叫作 flag。再小修改下代码文章图片
蛋先生: 看下帮助信息,搞定
文章图片
丹尼尔: o(^@^)o 功能都差不多了,现在得完善帮助信息,来提高用户使用体验。
蛋先生: 嗖.嗖.嗖.
文章图片
蛋先生: Done!
文章图片
丹尼尔: 这下完美了
蛋先生: 不,还差那么一点点
丹尼尔: 啥?
蛋先生: 发布啊,你不发布,别人怎么用呢
文章图片
丹尼尔: Oh yeah!
蛋先生: 当然,oclif 的功能远不止这些,有兴趣可以自行去探索了,今天就到这了
丹尼尔: 恩恩,又到了说再见的时候了,88
【嗖的一下就码出一个CLI】蛋先生: 要不,点个赞鼓励一下再走 (^▽^ )
推荐阅读
- KubeVela|KubeVela 1.5(灵活框选 CNCF 原子能力打造独特的企业应用发布平台)
- 资深技术笔译总结的这7条建议,看完提PR效率倍增
- ⅠSO9001|ⅠSO9001 2015
- 我努力,因为我自卑
- 我的成长之路---现在,未来,过去连载第008天
- 〖第6季〗一个人的远行
- 从随笔到写作的产品思维
- 你来我网,市场来说话
- 我的同学有超能力
- {调取该文章的TAG关键词}|发射卫星的背后:平安银行“星云物联计划”助实体经济高质量发展