# Commander.js 12.0.0 - Product: Commander.js (https://whatsnew.fyi/product/commander) - Vendor: TJ Holowaychuk - Date: 2024-02-03 - Version: 12.0.0 - Original notes: https://www.npmjs.com/package/commander/v/12.0.0 - Permalink: https://whatsnew.fyi/product/commander/releases/12.0.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add .addHelpOption() as another way of configuring built-in help option - **added** — Add .helpCommand() for configuring built-in help command - **fixed** — Use non-zero exit code when spawned executable subcommand terminates due to a signal - **fixed** — Check passThroughOptions constraints when using .addCommand and throw if parent command does not have .enablePositionalOptions() enabled - **changed** — Commander 12 requires Node.js v18 or higher - **changed** — Throw an error if adding an option with a flag which is already in use - **changed** — Throw an error if adding a command with name or alias which is already in use - **changed** — Throw error when calling .storeOptionsAsProperties() after setting an option value - **changed** — Replace non-standard JSDoc of @api private with documented @private - **changed** — .addHelpCommand() now takes a Command (passing string or boolean still works as before but deprecated) - **changed** — Refactor internal implementation of built-in help option - **changed** — Refactor internal implementation of built-in help command - **deprecated** — .addHelpCommand() passing string or boolean (use .helpCommand() or pass a Command) - **removed** — Remove default export of a global Command instance from CommonJS (use the named program export instead) ###### 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](./docs/deprecated.md#default-import-of-global-command-object) default import of the global Command object, you need to switch to using a named import (or create a new `Command`). ```js // 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