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

时间:2018-04-13 05:19:44

标签: node.js node-commander

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

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

预期输出:

您好

在子命令

世界

实际输出:

在子命令

世界

您好

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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