开发中遇到的问题
规范化
- 编码规范可提高交付质量,维护成本
- 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。