1

This is my code:

const {program} = require('commander');
program
  .option('--foo')
  .command('bar').action((str, opts) => {
    console.log('bar!');
  })
program.parse();
if (program.opts().foo) {
  console.log('foo!');
}

I run it like node test.js --foo bar and it prints:

bar!
foo!

I want it to print foo! first. How can I do this?

yegor256
  • 102,010
  • 123
  • 446
  • 597

1 Answers1

2

What approach makes sense depends on your program, but here are three approaches: listener for option, lifecycle hook, and simple code. I suggest looking at the lifecycle hook first.

const {program} = require('commander');
program
  .option('--foo')
  .on('option:foo', () => console.log('foo detected'))
  .hook('preAction', () => console.log('about to call action'));

program
  .command('bar').action((opts) => {
    if (program.opts().foo) {
      console.log('found foo before checking for bar');
    }
    console.log('bar!');
  })
program.parse();
if (program.opts().foo) {
  console.log('foo!');
}
$ node index.js --foo bar
foo detected
about to call action
found foo before checking for bar
bar!
foo!

(Disclaimer: I am a maintainer of Commander.)

shadowspawn
  • 3,039
  • 22
  • 26