嗖的一下就码出一个CLI

简介: 今天呢,准备推荐一个工具如果你现在没有开发命令行工具的打算那可以先收藏着以后,或许,应该会用到吧

0.jpeg

今天呢,准备推荐一个工具
如果你现在没有开发命令行工具的打算
那可以先收藏着
以后,或许,应该会用到吧


丹尼尔: 蛋兄,手头有个任务要开发一个命令行工具,有没快速搞起来的办法

蛋先生: 用 ncgen

丹尼尔: 额,这不是开发代码生成器的吗?我这不还没有命令行工具的项目模板嘛

蛋先生: 哦哦,也是,想错了。那看一下《烹饪一道美味的 CLI》 呗,已经把来龙去脉讲得很详细了

丹尼尔: 是很详细,但就是太过详细了,我想要嗖的一下就能搞定那种

蛋先生: 嗖的一下?容我想想,( ̄o ̄) . z Z

丹尼尔: 蛋兄,蛋兄 ...

蛋先生: 想起来了,《烹饪一道美味的 CLI》 有提到啊,就是 oclif


丹尼尔: 怎么用呢?假设我现在要开发一个百宝箱工具,就叫 dx-tools 吧

蛋先生: 没问题,首先肯定是要自动初始化工程项目的啦,最低要求了

1.gif

丹尼尔: 哎呦不错,开发的时候昨运行呢?

蛋先生: 简单~

2.gif

丹尼尔: 那现在来给百宝箱工具增加复制的功能吧,如 dx-tools cp

蛋先生: 安排。dx-tools cp 中的 cp 就是 dx-tools 的子命令 (oclif 称为 command),oclif 也为 command 提供了代码生成工具

3.gif

蛋先生: 运行后会生成 src/commands/cp.ts 代码文件。代码长啥样呢,我们等会再看。先运行下看看效果,可以看出已经有 cp 这个子命令了

4.gif

丹尼尔: Good!光有 cp 还不行,还得指定参数,像这样子 dx-tools cp source_file target_file

蛋先生: 好咧!dx-tools cp source_file target_file 中的 source_filetarget_file 是子命令 cp 的参数(oclif 称为 command arguments)。加参数前我们先看下 cp 默认生成的帮助信息,等会才好看出变化

5.gif

丹尼尔: 细心哦~

蛋先生: 前面提到生成的代码文件 src/commands/cp.ts,这会我们来看下代码。


import {Command, Flags} from'@oclif/core'exportdefaultclassCpextendsCommand {
staticdescription='describe the command here'staticexamples= [
'<%= config.bin %> <%= command.id %>',
  ]
staticflags= {
// 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'}),
  }
staticargs= [{name: 'file'}]
publicasyncrun(): Promise<void> {
const {args, flags} =awaitthis.parse(Cp)
constname=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(`youinput--forceand--file: ${args.file}`)}}}


蛋先生: 我们现在需要增加两个参数,小修改下

6.gif

蛋先生: 执行看下帮助信息,看,出来了

7.gif

蛋先生: 再执行下,看看获取参数的效果

8.gif

丹尼尔: Nice!最后我想加个选项,来指定如果目标文件存在,是否进行覆盖。像这样子 dx-tools cp -n source_file target_file 就表示不覆盖

蛋先生: -n 就是可选项,一般在命令行中称为 option,但在 oclif 这里是叫作 flag。再小修改下代码

9.gif

蛋先生: 看下帮助信息,搞定

10.gif

丹尼尔: o(^@^)o 功能都差不多了,现在得完善帮助信息,来提高用户使用体验。

蛋先生: 嗖.嗖.嗖.

11.gif

蛋先生: Done!

12.gif

丹尼尔: 这下完美了

蛋先生: 不,还差那么一点点

丹尼尔: 啥?

蛋先生: 发布啊,你不发布,别人怎么用呢

13.gif

丹尼尔: Oh yeah!


蛋先生: 当然,oclif 的功能远不止这些,有兴趣可以自行去探索了,今天就到这了

丹尼尔: 恩恩,又到了说再见的时候了,88

蛋先生: 要不,点个赞鼓励一下再走 (^▽^ )

目录
相关文章
|
5月前
|
开发框架 前端开发 .NET
AbpHelper CLI积累与实战分享
【9月更文挑战第19天】AbpHelper CLI 是一个强大的工具,用于提升开发人员使用 ABP 框架时的效率。它能快速生成代码、确保代码规范性,并执行自动化任务如数据库迁移和种子数据插入。本文分享了如何利用 AbpHelper CLI 快速初始化项目、开发模块及注意事项,帮助开发者提高效率和代码质量。
|
6月前
|
运维 数据安全/隐私保护 Docker
深入浅出Python装饰器《Docker容器化技术在运维中的应用与实践》
【8月更文挑战第29天】装饰器在Python中是一个强大而神秘的存在,它能够轻松地改变一个函数的行为而不修改其源代码。本文将通过浅显易懂的语言和生动的比喻,带你一步步揭开装饰器的神秘面纱,从基本概念到实际应用,让你轻松掌握这一魔法般的工具。
|
7月前
|
Java 关系型数据库 开发工具
Java开发者必备技能与工具:构建高效开发环境的指南
【7月更文挑战第23天】作为Java开发者,掌握核心技能、熟练使用开发工具与框架、不断提升自己的软技能是构建高效开发环境的关键。希望本文能够为广大Java开发者提供一些有价值的参考和启示,助力大家在Java开发的道路上越走越远。
|
9月前
|
Oracle Java 关系型数据库
搭建Java开发天堂:构建理想的开发环境
搭建Java开发天堂:构建理想的开发环境
108 1
搭建Java开发天堂:构建理想的开发环境
|
IDE Linux Go
Golang安装和配置指南:从零开始的高效开发之旅
Golang安装和配置指南:从零开始的高效开发之旅
|
前端开发 Ubuntu Java
深入浅出Docker:Java开发者的快速上手指南
前言 在今天的软件开发环境中,Docker已经成为了一种常见的开发和部署工具。无论你是前端开发者、后端开发者,还是DevOps工程师,理解并掌握Docker都将成为你所必须的技能。对于Java开发者来说,使用Docker可以极大地提高你的生产力。那么,如何使用Docker来部署Java应用呢?本文将为你揭示答案。
493 0
|
Web App开发 JavaScript 前端开发
「100%提高开发效率🔥」从零到一带你快速实现企业级CLI工具🐬
「100%提高开发效率🔥」从零到一带你快速实现企业级CLI工具🐬
437 0
「100%提高开发效率🔥」从零到一带你快速实现企业级CLI工具🐬
|
存储 缓存 Java
码出高效:Java开发手册-第2章(12)
本章开始讲解面向对象思想,并以Java 为载体讲述面向对象思想在具体编程语言中的运用与实践。当前主流的编程语言有50 种左右,主要分为两大阵营:面向对象编程与面向过程编程。面向对象编程(Object-Oriented Programming,OOP)是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发成本、维护成本和复用成本。面向对象编程思想完全不同于传统的面向过程编程思想,使大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可......
码出高效:Java开发手册-第2章(12)
|
JSON 安全 网络协议
码出高效:Java开发手册-第2章(5)
本章开始讲解面向对象思想,并以Java 为载体讲述面向对象思想在具体编程语言中的运用与实践。当前主流的编程语言有50 种左右,主要分为两大阵营:面向对象编程与面向过程编程。面向对象编程(Object-Oriented Programming,OOP)是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发成本、维护成本和复用成本。面向对象编程思想完全不同于传统的面向过程编程思想,使大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可......
码出高效:Java开发手册-第2章(5)
|
Java 数据安全/隐私保护
码出高效:Java开发手册-第2章(4)
本章开始讲解面向对象思想,并以Java 为载体讲述面向对象思想在具体编程语言中的运用与实践。当前主流的编程语言有50 种左右,主要分为两大阵营:面向对象编程与面向过程编程。面向对象编程(Object-Oriented Programming,OOP)是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发成本、维护成本和复用成本。面向对象编程思想完全不同于传统的面向过程编程思想,使大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可......
码出高效:Java开发手册-第2章(4)