0

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

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");
}

预期输出:

你好

内部子命令

世界

实际输出:

内部子命令

世界

你好

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

4

2 回答 2

1

我找到了解决我的问题的解决方法

    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");
    }
    }

但如果有人知道这样做的正确方法,请发布答案。

于 2018-04-13T06:16:31.200 回答
1

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

program.on('option:hello', function () {
  console.log('hello);
});
于 2019-05-17T11:11:22.530 回答