Commander.js v9.0.0 Release Notes

Release Date: 2022-01-28 // about 2 years ago
  • โž• Added

    • simpler ECMAScript import ([#1589])
    • Option.preset() allows specifying value/arg for option when used without option-argument (especially optional, but also boolean option) ([#1652])
    • .executableDir() for custom search for subcommands ([#1571])
    • throw with helpful message if pass Option to .option() or .requiredOption() ([#1655])
    • ๐Ÿ”ง .error() for generating errors from client code just like Commander generated errors, with support for .configureOutput(), .exitOverride(), and .showHelpAfterError() ([#1675])
    • ๐Ÿ”€ .optsWithGlobals() to return merged local and global options ([#1671])

    ๐Ÿ”„ Changed

    • ๐Ÿ’ฅ Breaking: Commander 9 requires Node.js v12.20.0 or higher
    • โšก๏ธ update package-lock.json to lockfile@2 format ([#1659])
    • 0๏ธโƒฃ showSuggestionAfterError is now on by default ([#1657])
    • ๐Ÿ’ฅ Breaking: default value specified for boolean option now always used as default value (see .preset() to match some previous behaviours) ([#1652])
    • 0๏ธโƒฃ default value for boolean option only shown in help if true/false ([#1652])
    • ๐Ÿ‘‰ use command name as prefix for subcommand stand-alone executable name (with fallback to script name for backwards compatibility) ([#1571])
    • ๐Ÿ‘ allow absolute path with executableFile ([#1571])
    • โœ‚ removed restriction that nested subcommands must specify executableFile ([#1571])
    • TypeScript: allow passing readonly string array to .choices() [(#1667)]
    • ๐Ÿ“œ TypeScript: allow passing readonly string array to .parse(), .parseAsync(), .aliases() [(#1669)]

    ๐Ÿ›  Fixed

    • 0๏ธโƒฃ option with optional argument not supplied on command line now works when option already has a value, whether from default value or from previous arguments ([#1652])

    โœ‚ Removed

    • ๐Ÿ’ฅ Breaking: removed internal fallback to require.main.filename when script not known from arguments passed to .parse() (can supply details using .name(), and .executableDir() or executableFile) ([#1571])