import * as fs from 'fs' import * as path from 'path' import { program } from 'commander' import { createPreset } from './presets/create' import { releasePreset } from './presets/release' import { ICreateOptions, IFeatureOptions, IReleaseOptions } from './intf/IOptions' import { logger } from './utils/logger' program.exitOverride(() => {}) /** 宇石前端 cli 工具 */ export default class Cli { /** cli package.json */ packageJson: any constructor() { // # 加载package.json this.loadPackageJson() // # 创建解决方案 this.createProgram() } /** 加载package.json * */ loadPackageJson() { const fi: string = fs.readFileSync(path.join(__dirname, '../package.json'), { encoding: 'utf-8' }) this.packageJson = JSON.parse(fi) } /** 创建帮助/说明 * */ createProgram() { // 修改帮助描述 program.helpOption('-h, --help', '打印帮助') // 写入版本号 program.version(this.packageJson.version, '-V', '打印版本号') // 写入帮助声明 program .addHelpText('beforeAll', '> ys-cli | 宇石前端CLI工具\n\n') .addHelpText('afterAll', '\n--------\n by Li!') // 写入 create 命令 program // @ 定义命令 .command('create', {}) .alias('c') .description('Desciption: 创建一个新的项目') // @ 定义 options .option('-t, --type ', '项目类型(选择项目模板, 建议通过命令行选择)') .option('-p, --project ', '项目名') .option('-g, --git ', 'git 仓库地址') // > 创建 action .action(async (params: ICreateOptions) => { try { await createPreset(params) } finally { logger.info('任务结束') } }) // 写入 release 命令 program // @ 定义命令 .command('release') .description('Desciption: 发布一个新的 Tag') // @ 定义 options .option('-m, --message ', '组合命令 | git add . && git commit -m [commit message]') .option('-p, --push', '执行 git push 命令') .combineFlagAndOptionalValue(true) // > 创建 action .action(async (params: IReleaseOptions) => { try { await releasePreset(params) } finally { logger.info('任务结束') } }) // @ parse program.parse() } }