Releases: tj/commander.js
Releases · tj/commander.js
v9.0.0
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
Optionto.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)
showSuggestionAfterErroris 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)
- 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
- 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.filenamewhen script not known from arguments passed to.parse()
(can supply details using.name(), and.executableDir()orexecutableFile) (#1571)
9.0.0-1
9.0.0-0
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
Optionto.option()or.requiredOption()(#1655)
Changed
- Breaking: Commander 9 requires Node.js v12.20.0 or higher
- update package-lock.json to lockfile@2 format (#1659)
showSuggestionAfterErroris 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)
- 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)
Fixed
- 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.filenamewhen script not known from arguments passed to.parse()(can supply details using.name(), and.executableDir()orexecutableFile) (#1571)
v8.3.0
v8.2.0
Added
.showSuggestionAfterError()to show suggestions after unknown command or unknown option (#1590)- add
Optionsupport for values from environment variables using.env()(#1587)
Changed
- show error for unknown global option before subcommand (rather than just help) (#1590)
Removed
- TypeScript declaration of unimplemented
OptionmethodargumentRejected
v8.1.0
v8.0.0
Added
.argument(name, description)for adding command-arguments (#1490).createArgument()factory method (#1497).addArgument()(#1490)Argumentsupports.choices()(#1525).showHelpAfterError()to display full help or a custom message after an error (#1534).hook()with support for'preAction'and'postAction'callbacks (#1514)- client typing of
.opts()return type using TypeScript generics (#1539) - the number of command-arguments is checked for programs without an action handler (#1502)
.getOptionValue()and.setOptionValue()(#1521)
Changed
- refactor and simplify TypeScript declarations (with no default export) (#1520)
.parseAsync()is now declared asasync(#1513)- Breaking:
Helpmethod.visibleArguments()returns array ofArgument(#1490) - Breaking: Commander 8 requires Node.js 12 or higher (#1500)
- Breaking:
CommanderErrorcodecommander.invalidOptionArgumentrenamedcommander.invalidArgument(#1508) - Breaking: TypeScript declaration for
.addTextHelp()callback no longer allows result ofundefined, now juststring(#1516) - refactor
index.tabinto a file per class (#1522) - remove help suggestion from "unknown command" error message (see
.showHelpAfteError()) (#1534) Commandproperty.arginitialised to empty array (was previously undefined) (#1529)- update dependencies
Deprecated
- second parameter of
cmd.description(desc, argDescriptions)for adding argument descriptions (#1490)- (use new
.argument(name, description)instead)
- (use new
InvalidOptionArgumentError(replaced byInvalidArgumentError) (#1508)
Removed
- Breaking: TypeScript declaration for default export of global
Commandobject (#1520)- (still available as named
programexport)
- (still available as named
Migration Tips
If you have a simple program without an action handler, you will now get an error if
there are missing command-arguments.
program
.option('-d, --debug')
.arguments('<file>');
program.parse();$ node trivial.js
error: missing required argument 'file'If you want to show the help in this situation, you could check the arguments before parsing:
if (process.argv.length === 2)
program.help();
program.parse();Or, you might choose to show the help after any user error:
program.showHelpAfterError();8.0.0-2
8.0.0-1
8.0.0-0
Added
.getOptionValue()and.setOptionValue()(#1521).hook()with support for'preAction'and'postAction'callbacks (#1514).argument(name, description)for adding command-arguments (#1490).createArgument()factory method (#1497)- the number of command-arguments is checked for programs without an action handler (#1502)
Changed
- refactor and simplify TypeScript declarations (with no default export) (#1520)
.parseAsync()is now declared asasync(#1513)- Breaking:
Helpmethod.visibleArguments()returns array ofArgument(#1490) - Breaking: Commander 8 requires Node.js 12 or higher (#1500)
- Breaking:
CommanderErrorcodecommander.invalidOptionArgumentrenamedcommander.invalidArgument(#1508) - Breaking: TypeScript declaration for
.addTextHelp()callback no longer allows result ofundefined, now juststring(#1516)
Deprecated
- second parameter of
cmd.description(desc, argDescriptions)for adding argument descriptions (#1490)- (use new
.argument(name, description)instead)
- (use new
InvalidOptionArgumentError(replaced byInvalidArgumentError) (#1508)
Removed
- Breaking: TypeScript declaration for default export of global
Commandobject (#1520)- (still available as named
programexport)
- (still available as named