Commander.js 12.0.0

12.0.0
Added 2
  • Add .addHelpOption() as another way of configuring built-in help option
  • Add .helpCommand() for configuring built-in help command
Changed 8
  • Commander 12 requires Node.js v18 or higher
  • Throw an error if adding an option with a flag which is already in use
  • Throw an error if adding a command with name or alias which is already in use
  • Throw error when calling .storeOptionsAsProperties() after setting an option value
  • Replace non-standard JSDoc of @api private with documented @private
  • .addHelpCommand() now takes a Command (passing string or boolean still works as before but deprecated)
  • Refactor internal implementation of built-in help option
  • Refactor internal implementation of built-in help command
Fixed 2
  • Use non-zero exit code when spawned executable subcommand terminates due to a signal
  • Check passThroughOptions constraints when using .addCommand and throw if parent command does not have .enablePositionalOptions() enabled
Removed 1
  • Remove default export of a global Command instance from CommonJS (use the named program export instead)
Deprecated 1
  • .addHelpCommand() passing string or boolean (use .helpCommand() or pass a Command)

From Commander.js

Added
  • .addHelpOption() as another way of configuring built-in help option ([#2006])
  • .helpCommand() for configuring built-in help command ([#2087])
Fixed
  • Breaking: use non-zero exit code when spawned executable subcommand terminates due to a signal ([#2023])
  • Breaking: check passThroughOptions constraints when using .addCommand and throw if parent command does not have .enablePositionalOptions() enabled ([#1937])
Changed
  • Breaking: Commander 12 requires Node.js v18 or higher ([#2027])
  • Breaking: throw an error if add an option with a flag which is already in use ([#2055])
  • Breaking: throw an error if add a command with name or alias which is already in use ([#2059])
  • Breaking: throw error when calling .storeOptionsAsProperties() after setting an option value ([#1928])
  • replace non-standard JSDoc of @api private with documented @private ([#1949])
  • .addHelpCommand() now takes a Command (passing string or boolean still works as before but deprecated) ([#2087])
  • refactor internal implementation of built-in help option ([#2006])
  • refactor internal implementation of built-in help command ([#2087])
Deprecated
  • .addHelpCommand() passing string or boolean (use .helpCommand() or pass a Command) ([#2087])
Removed
  • Breaking: removed default export of a global Command instance from CommonJS (use the named program export instead) ([#2017])
Migration Tips

global program

If you are using the deprecated default import of the global Command object, you need to switch to using a named import (or create a new Command).

// const program = require('commander');
const { program } = require('commander');

option and command clashes

A couple of configuration problems now throw an error, which will pick up issues in existing programs:

  • adding an option which uses the same flag as a previous option
  • adding a command which uses the same name or alias as a previous command
View original

Upgraded? How did it go?

Discussion