Lehks
Lehks

Reputation: 3166

NodeJS Commander structured subcommands

I am new to commander and I am trying to achieve a command tree like this:

|- build
|    |- browser (+ options)
|    |- cordova (+ options)
|    |- no subcommands, just options
|- config
|    |- create (+ options)

Is it possible to split these commands up into multiple files, for example somewhat like this:

Central File:

const program = new commander.Command();
program.command('build').description(...);
program.command('config').description(...);

File for build command:

program.command('browser').description(...);
program.command('cordova').description(...);
program.option(...);

File for config command:

program.command('create').description(...);

I know of the Git-Style subcommands, but these seem to require executable files (I only have regular JS files)

Upvotes: 10

Views: 9004

Answers (2)

Kim T
Kim T

Reputation: 6436

There is an example in their documentation here:

const commander = require('commander');
const program = new commander.Command();
const brew = program.command('brew');
brew
  .command('tea')
  .action(() => {
    console.log('brew tea');
  });
brew
  .command('coffee')
  .action(() => {
    console.log('brew coffee');
  });

Example output:

$ node nestedCommands.js brew tea
brew tea

https://github.com/tj/commander.js/blob/master/examples/nestedCommands.js

Upvotes: 15

shadowspawn
shadowspawn

Reputation: 3825

There is explicit support in Commander for standalone subcommand "executable" files with the .js file extension, without needing to set file permissions etc to make it directly executable on command line.

pm.js

const commander = require('commander');
const program = new commander.Command();
program
  .command('build', 'build description')
  .command('config', 'config description')
  .parse(process.argv);

pm-config.js

const commander = require('commander');
const program = new commander.Command();
program
  .command('create')
  .description('create description')
  .action(() => {
    console.log('Called create');
  });
program.parse(process.argv);
$ node pm.js config create
Called create

Upvotes: 9

Related Questions