这块判断 program.args 逻辑不理解

这块判断 program.args 逻辑不理解

// 注册全局 options 和 命令
function registerCommand() {
  program
    .name(Object.keys(pkg.bin)[0])
    .usage('<command> [options]')
    .version(pkg.version) // 配置版本
    .option('-d, --debug', '是否开启调试模式', false) // 配置全局option并指定默认值
    ;

  // 监听 --debug 全局 option 
  program.on('option:debug', function () {
    if (program.opts().debug) {
      process.env.LOG_LEVEL = 'verbose' // 基于 --debug 全局 options 动态配置一个环境变量
    } else {
      process.env.LOG_LEVEL = 'info'
    }
    log.level = process.env.LOG_LEVEL
  });

  // 监听 未知命令
  program.on('command:*', function (obj) {
    const availableCommandes = program.commands.map(cmd => cmd.name())
    console.log(colors.red('未知的命令: ' + obj[0]))
    if (availableCommandes.length > 0) {
      console.log(colors.green('可用命令: ' + availableCommandes.join(',')))
    }
  });

  program.parse(process.argv) // 解析命令行参数

  // 没有命令
  if (program.args && program.args.length < 1) {
    program.outputHelp() // 打印帮助文档
    console.log()
  }
}
  1. 为什么判断 --debug 或 -d 打印帮助文档不在 program.on('option:debug')中做?

  2. if (program.args && program.args.length < 1) 这个if不是只判断了命令行中有没有命令吗?为什么只有输入 -d 或 --debug 才能进入这个if?我输入 -V 这种全局option没有进来

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
扬_灵 2022-05-13 18:45:12

同学你好,第一个问题不是很理解你的需求可以详细说一下吗,debug模式是用来做调试时使用的,你是想在debug模式下打印帮助文档?第二个问题,-V 和 -h 这两个参数commander中默认封装提供的,输入后执行的是其内部的代码了。

  • 提问者 慕粉3946981 #1

    我对上面32行if判断的逻辑不理解,这个if不是判断没有命令就会进来吗?那我输入 --debug 会进这个if中,输入 -V为什么就进不了这个if中?

    2022-05-13 21:24:14
  • 扬_灵 回复 提问者 慕粉3946981 #2

    同学你好,—V是是进入不了这个判断的,这个只能监听我们自己添加的参数。

    2022-05-15 09:33:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师