2022-06-15 自建CLI工具

开发中遇到的问题

规范化

  • 编码规范可提高交付质量,维护成本
  • commit规范可快速定位版本问题,开发进度

流程化

  • 磨刀不误砍柴工,必要的流程环节是会开发事半功倍的,比如需求讨论,返讲,自测,showcase,代review,测试案例审核等

效率提升

  • 将重复代码轮子化,重复工作自动化

代码质量

  • 代码交叉测
  • review
  • sonar扫描等

快速方便部署

  • 自动化构建,持续继承

解决方案

常规基建

  • 组件库+脚手架+工具库+模板+CLI
    Git Flow
  • 通过常规Git Flow工作流程,不同分支不同功能集合+code review
    CICD
  • webpack+脚本

CLI工具分析

构建

  • 提供本地构建功能
  • 接管发布构建
    质量
  • 自动化测试
  • Eslint校验
    模板
  • 创建模板
  • 创建区块
    工具集
  • 其他可内置的工具代码

项目构建过程采用CLI统一项目配置,eslint抽离出来进行接管,可以保证团队成员代码风格统一

CLI开发

原理

  • nodejs程序在运行时,process对象中有一个叫argv的属性。命令行很重要的就是要执行解析argv。

使用commander.js

  • 制作命令行的工具包,让制作命令行更简单
  // file: ./bisheng
#!/usr/bin/env node
const program = require('commander');
const package = require('../package.json');
program
  .version(package.version)
  .option('-f, --foo', 'enable some foo')  
  .option('-b, --bar', 'enable some bar')  
  .option('-B, --baz', 'enable some baz');

  program.on('--help', function(){  
   console.log('');  
   console.log('Examples:');  
   console.log('  $ custom-help --help');
   console.log('  $ custom-help -h');
  });

  program.parse(process.argv);
  • 常用API
    • .version
      作用:定义cli的版本号

    • .option
      作用:用于定义命令选项:.option('-n, --name <name>', 'your name''GK')
      执行命令$ ./bisheng --name 123
      program.name值为123 不输入123则取默认值GK

    • .command
      作用:添加命令名称
      用法示例:.command('rmdir [otherDirs...]', 'install description', opts)
      参数解析:

      第一个参数 命令名称<必须>:命令后面可跟用 <> 或 [] 包含的参数;命令的最后一个参数可以是可变的,像实例中那样在数组后面加入 otherDirs... 标志;在命令后面传入的参数会被传入到 action 的回调函数以及 program.args 数组中
      第二个参数 命令描述<可省略>:如果存在,且没有显示调用action(fn),就会启动子命令程序,否则会报错当没有第二个参数时,commander.js将返回Command对象,若有第二个参数,将返回原型对象。当带有第二个参数,并且没有显示调用action(fn)时,则将会使用子命令模式。所谓子命令模式即,./pm,./pm-install,./pm-search等。这些子命令跟主命令在不同的文件中。 3. 配置选项<可省略>:可配置noHelp、isDefault等

    • .action
      作用:用于设置命令执行的相关回调。fn可以接受命令的参数为函数形参,顺序与command()中定义的顺序一致。

    • .parse
      用法:program.parse(process.argv)
      此api一般是最后调用,用于解析process.argv。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容