Reputation: 3166
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
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
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