Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add example for "global" options #1708

Merged
merged 2 commits into from Mar 21, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
51 changes: 51 additions & 0 deletions examples/global-options.js
@@ -0,0 +1,51 @@
#!/usr/bin/env node

// This example shows a couple of ways to add a "global" option to all of the subcommands.
// The first approach is to use a subclass and add the option as the subcommand is created.
// The second approach is to loop over the subcommands after they have been created.
//
// The code in this example assumes there is just one level of subcommands.
//
// (A different pattern for a "global" option is to add it to the root command, rather
// than to the subcommand. That is not shown here.)

// const { Command } = require('commander'); // (normal include)
const { Command } = require('../'); // include commander in git clone of commander repo

// Common options can be added when subcommands are created by using a custom subclass.
// If the options are unsorted in the help, these will appear first.
class MyRootCommand extends Command {
createCommand(name) {
const cmd = new Command(name);
cmd.option('-v, --verbose', 'use verbose logging');
return cmd;
}
}

const program = new MyRootCommand();

program.command('print')
.option('--a4', 'Use A4 sized paper')
.action((options) => {
console.log('print options: %O', options);
});

program.command('serve')
.option('-p, --port <number>', 'port number for server')
.action((options) => {
console.log('serve options: %O', options);
});

// Common options can be added manually after setting up program and subcommands.
// If the options are unsorted in the help, these will appear last.
program.commands.forEach((cmd) => {
cmd.option('-d, --debug');
});

program.parse();

// Try the following:
// node common-options.js --help
// node common-options.js print --help
// node common-options.js serve --help
// node common-options.js serve --debug --verbose