在子命令之前执行全局选项

executing global options before subcommands

我试图在子命令之前执行一些全局参数,但子命令在 .

之前执行
program
    .version('0.0.1','-V, --version')
    .option('-h, --hello','print hello')


program
    .command('msg')
    .option('-w, --world','print world')

    .action(function(options){

        console.log("inside subcommand");
        if(options.world){
            console.log("world");
        }
    });

program.parse(process.argv);

if(program.hello){
    console.log("hello");
}

预期输出:

你好

内部子命令

世界

实际输出:

内部子命令

世界

你好

如何让全局选项在控制流到子命令之前执行。 全局选项不应在子命令中定义,代码应在单个文件中。

我找到了解决问题的方法

    var program = require('commander');

    var globalFlag = 1;

    program
        .version('0.0.1','-V, --version')
        .option('-h, --hello','print hello')


    program
    .command('msg')
    .option('-w, --world','print world')

    .action(function(options){
        if(globalFlag){
        global();
        globalFlag=0;}

        console.log("inside subcommand");
        if(options.world){
            console.log("world");
        }
    });


    program.parse(process.argv);

    if(globalFlag){
        global();
        globalFlag=0;
    }

    function global(){
    if(program.hello){
        console.log("hello");
    }
    }

但是如果有人知道正确的方法,请post回答。

您可以使用自定义事件侦听器。

program.on('option:hello', function () {
  console.log('hello);
});