yargs 简易指南:撸一个CLI

编程入门 行业动态 更新时间:2024-10-25 18:29:22

yargs <a href=https://www.elefans.com/category/jswz/34/1769136.html style=简易指南:撸一个CLI"/>

yargs 简易指南:撸一个CLI

前言

最近在写一个覆盖公司产品全站页面性能测试的项目,随着代码量逐渐上升,
单纯的脚本执行的姿势,使维护成本上去了,代码散落各地,调用要打一大串。
所以直接搞成CLI改善使用体验和降低维护成本。

这篇文章只聚焦CLI入口的姿势及经验分享。

成品图


![在这里插入图片描述](.png)
![在这里插入图片描述](.png)

资料及思路

搞CLI的前提就是正确的解析终端命令行传递的命令及参数,
node生态里面,有挺多解析库的, 比如commander,minimist 这些,
但是有一个是我之前调研过感觉不错的,刚好这次可以用上,就是yargs;

前置知识储备

  • 知道linux风格的命令行规范,比如可选参数,子命令等
  • node解析参数的原理
    • process.argv

采用的解析库

yargs : API风格是链式调用,具备完善的command和复杂参数的组合,以及对应的hanlder【钩子响应】,
有完整的typescript提示,在写的过程中,直接跳转看类型定义可以减少看文档的次数。
这玩意让CLI代码的可读性直接拉升,哪怕你有同名参数,但是结合不同的commandhandler就可以很好的独立开来!

需求

  • 伪CLI风格调用
    • 不是真的发布CLI,结合package.json的scripts调用,适用于整个工程使用
  • 提供多功能命令【command】,独立不同功能
    • 命令及参数支持别名,类型定义,是否必填,描述等
    • 参数错误捕获
    • 参数的自定义校验及必填
  • 命令执行过程中断

代码实现

接下来请看代码注释,更加清晰的介绍可以看下官网的API介绍,这里不过多介绍!

const yargs = require('yargs/yargs');
const process = require('process');
const { hideBin } = require('yargs/helpers');
const path = require('path');
const { measureRun, measureRunAllModule } = require('./run'); // 功能实现
const genData2File = require('./gen'); // 功能实现
const clean = require('./clean'); // 功能实现// 检测终端输入的中断快捷键信号【cmd+c】,强行退出进程
process.on('SIGINT', () => {process.kill(process.pid);
});const argv = yargs(hideBin(process.argv)).strict()// 严格模式,参数错误直接抛出异常mand({// 提供子命令command: 'measure', // 子命令全称aliases: ['m'], // 子命令别名desc: '测量文件', // 子命令描述builder: function (yargs) {// 此处返回命令参数组合return yargs.check((argv) => {// .check支持手动校验接受的参数if (argv.all) return true;if (typeof argv.sourceFile !== 'string' || !argv.sourceFile) {throw new Error('CLI出错啦,源文件路径必须是字符串且不能为空!\n');}return

更多推荐

yargs 简易指南:撸一个CLI

本文发布于:2024-03-23 17:11:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740718.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:简易   指南   yargs   CLI

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!