前端架构-week3-commander脚手架命令注册实现

本文详细介绍了如何使用commander库快速创建和配置命令行脚手架,包括命令注册、全局配置、选项设置以及一些高级功能如自定义帮助信息、调试模式和处理未知命令。通过实例展示了commander的用法,帮助开发者更高效地构建命令行接口工具。
摘要由CSDN通过智能技术生成

目录

快速实现一个commander脚手架

commander脚手架全局配置 

commander脚手架命令注册的两种方法

commander注册命令的两种高级用法 

 再讲3条commander的高级用法


快速实现一个commander脚手架

const commander = require('commander');
const pkg = require('../package.json');

// 获取commander的单例
// const { program } = commander;

// 实例化一个Command示例
const program = new commander.Command();

program.version(pkg.version).parse(process.argv)

commander脚手架全局配置 

program
  .name(Object.keys(pkg.bin)[0]) //package名字最好用bin第一个属性名
  .usage('<command> [options]')
  .version(pkg.version)
  .option('-d, --debug', '是否开启调试模式', false)
  .option('-e, --envName <envName>', '获取环境变量名称');

  //console.log(program.debug) 输出false
  //console.log(program.envName)   输出传入的值

  .parse(process.argv)

program.outputHelp() //打印帮助信息
program.opts()       //返回options key-value

commander脚手架命令注册的两种方法

// command 注册命令
// <>必须传 []可选传
const clone = program.command('clone <source> [destination]');
clone
    .description('clone a repository')
    .option('-f, --force', '是否强制克隆')
    .action((source, destination, cmdObj) => {
        console.log('do clone', source, destination, cmdObj.force)
    })

// imooc-test clone aaa bbb
// imooc-test clone --force aaa bbb 
// imooc-test clone aaa --force bbb
// --force 传不传 放在哪都可以
// addCommand 注册当前脚手架下子命令

//program之外,再注册一个脚手架
const service = new commander.Command('service');
service
  .command('start [port]')
  .description('start service at some port')
  .action((port) => {
    console.log('do service start', port);
  });

//command不能连写。因为:service.command() 返回命令对象,区别于脚手架对象。
service
  .command('stop')
  .description('stop service')
  .action(() => {
    console.log('stop service');
  });

program.addCommand(service);

// 命令行中执行 imooc-test service stop

commander注册命令的两种高级用法 

// 对命令注册进行自动匹配,匹配所有输入命令
// 相当于 Yargs.demandCommand()

program
   .arguments('<cmd> [options]')
   .description('test command', {
     cmd: 'command to run',
     options: 'options for command',
   })
   .action(function(cmd, options) {
     console.log(cmd, options);
   });
// 代码效果:
// imooc-test install      -> imooc-test-install
// imooc-test install init -> imooc-cli init

program
  .command('install [name]', 'install package', {
    executableFile: 'imooc-cli',  // 脚手架串行使用
    isDefault: true,              // 设置默认命令,输入imooc-test时执行
    hidden: true,                 // command隐藏
  })
  .alias('i');


 再讲3条commander的高级用法

// 高级定制1:自定义help信息

 // 重写program.helpInformation,使得帮助信息返回空字符串
 program.helpInformation = function() {
   return '';
 };
 // program 继承 EventEmitter 对象,支持事件监听机制
 program.on('--help', function() {
   console.log('your help information');
 });
// 高级定制2:实现debug模式
// 先解析参数,再进行事件监听。属于命令执行中。命令执行前准备工作中,不行。

// option:debug 相当于 --debug
program.on('option:debug', function() {
  if (program.debug) {
    process.env.LOG_LEVEL = 'verbose';
  }
  console.log(process.env.LOG_LEVEL);
});
// 高级定制3:对未知命令监听

program.on('command:*', function(obj) {

  // console.log(obj);
  // 命令行 imooc-test aaa bbb
  // 打印 ['aaa', 'bbb']

  console.error('未知的命令:' + obj[0]);
   
  const availableCommands = program.commands.map(cmd => cmd.name());
  // console.log(availableCommands);
  console.log('可用命令:' + availableCommands.join(','));
});

 最后要调用parse,否则不会解析参数,至关重要

program.parse(process.argv)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chengbo_eva

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值