Commands

Creating a command

.command(name: string, description?: string)

When developing a very simple program, Caporal will implicitly create a Command for you.

program
  .argument(/* ... */)
  // your action is in fact attached to the program command.
  .action(/* ... */)

When writing complex programs, you'll likely want to manage multiple commands. Use the .command() method to specify them:

program
  // a first command
  .command("my-command", "Optional command description used in help")
  .argument(/* ... */)
  .action(/* ... */)
  // a second command
  .command("sec-command", "...")
  .option(/* ... */)
  .action(/* ... */)


 



 


Aliasing

.alias(...aliases: string[])

You can create one or multiple aliases for your command using .alias():

program
  .command("install", "My command named `install`")
  .alias("i", "setup")
  .action(/* ... */)


 

This command can be called as my-program install, my-program i, and my-program setup.

Default command

.default()

Use .default() to make your command the default one of your program.

program
  // the install command is the default command for the program
  .command("install", "My command named `install`")
  .default()
  .action(/* ... */)
  // a second command
  .command("uninstall", "My command named `uninstall`")
  .action(/* ... */)



 




Running my-program without specifying the command will execute the default install command.

Adding arguments

.argument(synopsis, description, [opts])

ParameterTypeDescription
synopsisstringArgument synopsis. Specify <my-arg> for a mandatory argument or [my-arg] for an optional one.
descriptionstringArgument description displayed in help.
optsOther optional properties
opts.validatorValidatorA Validator in charge of validating the value provided by the user.
opts.defaultanyA default value when not provided

Argument synopsis

An argument synopsis consists of one word, the argument name, enclosed by angled brackets or square brackets. Angled brackets (e.g. <item>) indicate a required argument while square brackets (e.g. [env]) indicate an optional argument.

Variadic arguments

You can specify arguments as being variadic (e.g. repeatable) by suffixing their name by ....

program
  // the install command is the default command for the program
  .command("install", "My command named `install`")
  .argument("<package...>", "Package(s) to install")
  .action(({ logger, args }) => {
    // args.package is an array
    logger.info("Installing %d package(s)", args.package.length)
  })



 




Adding options

.option(synopsis, description, [opts])

ParameterTypeDescription
synopsisstringOption synopsis.
descriptionstringOption description that will be displayed in help.
optsobjectOther optional properties
opts.validatorValidatorValidator to be used.
opts.defaultanyDefault value.
opts.requiredbooleanSpecify if the option itself is required. Default to false.

Option synopsis

An option synopsis consists of short and/or long notations plus a potential expected value placeholder. let's take some examples:

  • -f <file> means that the short option -f has a mandatory value associated.
  • -f [file] means that the short option -f has an optional value.
  • -v (without a value placeholder) means the option is a boolean. If -v is provided in the command line, its value will be true.
  • -f, --file <file> means the option can be provided either by its short notation -f or by its long notation --file. You don't have to repeat the placeholder twice in that case.
  • -f <files...> means a variadic option (using ...), e.g. the option can be repeated. The resulting value for this option will be an array.

Help

Customizing help

.help(contents: string, opts)

.help() lets you customize the command help. Learn more in the help section of this guide.

Hiding from help

.hide()

Hide your command from help.

program
  .command("install", "My command named `install`")
  .action(/* ... */)
  // This command won't appear in help
  .command("uninstall", "My command named `uninstall`")
  .hide()





 

In the example above, running my-program help will only list the install command.

Casting values

.cast(enable: boolean)

By default, Caporal auto-cast arguments and options values like numbers and booleans. You can disable this behavior for a specific command using .cast(false).

program
  .command("install", "My command named `install`")
  .action(/* ... */)
  .command("uninstall", "My command named `uninstall`")
  .cast(false)




 

Strict mode

.strict(enable: boolean)

By default, strict settings are not defined for commands, and inherit from the program settings. Calling .strict(value) on a command will override the program settings.