Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning. (Format adopted after v3.0.0.)
Fixed
- TypeScript definition for
.action()
should include Promise for async (#1157)
Added
- two routines to change how option values are handled, and eliminate name clashes with command properties (#933)
- see storeOptionsAsProperties and passCommandToAction in README
.parseAsync
to use instead of .parse
if supply async action handlers (#806)
Fixed
- Remove trailing blanks from wrapped help text (#1096)
Changed
- update dependencies
- extend security coverage for Commander 2.x to 2020-02-03
- improvements to README
- improvements to TypeScript definition documentation
- move old versions out of main CHANGELOG
- removed explicit use of
ts-node
in tests
Fixed
- display help when requested, even if there are missing required options (#1091)
Added
- automatically wrap and indent help descriptions for options and commands (#1051)
.exitOverride()
allows override of calls to process.exit
for additional error handling and to keep program running (#1040)
- support for declaring required options with
.requiredOptions()
(#1071)
- GitHub Actions support (#1027)
- translation links in README
Changed
- dev: switch tests from Sinon+Should to Jest with major rewrite of tests (#1035)
- call default subcommand even when there are unknown options (#1047)
- Breaking Commander is only officially supported on Node 8 and above, and requires Node 6 (#1053)
Fixed
- Breaking keep command object out of program.args when action handler called (#1048)
- also, action handler now passed array of unknown arguments
- complain about unknown options when program argument supplied and action handler (#1049)
- this changes parameters to
command:*
event to include unknown arguments
- removed deprecated
customFds
option from call to child_process.spawn
(#1052)
- rework TypeScript declarations to bring all types into imported namespace (#1081)
Migration Tips
Testing for no arguments
If you were previously using code like:
if (!program.args.length) ...
a partial replacement is:
if (program.rawArgs.length < 3) ...
4.0.0-1 Prerelease (2019-10-08)
(Released in 4.0.0)
4.0.0-0 Prerelease (2019-10-01)
(Released in 4.0.0)
Fixed
- Improve tracking of executable subcommands.
Changed
- update development dependencies
Fixed
- Improve tracking of executable subcommands.
Changed
- update development dependencies
Added
- .name and .usage to README (#1010)
- Table of Contents to README (#1010)
- TypeScript definition for
executableFile
in CommandOptions (#1028)
Changed
- consistently use
const
rather than var
in README (#1026)
Fixed
- help for sub commands with custom executableFile (#1018)
3.0.0 / 2019-08-08
- Add option to specify executable file name (#999)
- e.g.
.command('clone', 'clone description', { executableFile: 'myClone' })
- Change docs for
.command
to contrast action handler vs git-style executable. (#938)
- Breaking Change TypeScript to use overloaded function for
.command
. (#938)
- Change to use straight quotes around strings in error messages (like 'this' instead of `this') (#915)
- Add TypeScript "reference types" for node (#974)
- Add support for hyphen as an option argument in subcommands (#697)
- Add support for a short option flag and its value to be concatenated for action handler subcommands (#599)
- e.g.
-p 80
can also be supplied as -p80
- Add executable arguments to spawn in win32, for git-style executables (#611)
- e.g.
node --harmony myCommand.js clone
- Add parent command as prefix of subcommand in help (#980)
- Add optional custom description to
.version
(#963)
- e.g.
program.version('0.0.1', '-v, --vers', 'output the current version')
- Add
.helpOption(flags, description)
routine to customise help flags and description (#963)
- e.g.
.helpOption('-e, --HELP', 'read more information')
- Fix behavior of --no-* options (#795)
- can now define both
--foo
and --no-foo
- Breaking custom event listeners:
--no-foo
on cli now emits option:no-foo
(previously option:foo
)
- Breaking default value: defining
--no-foo
after defining --foo
leaves the default value unchanged (previously set it to false)
- allow boolean default value, such as from environment (#987)
- Increment inspector port for spawned subcommands (#991)
- e.g.
node --inspect myCommand.js clone
Migration Tips
The custom event for a negated option like --no-foo
is option:no-foo
(previously option:foo
).
program
.option('--no-foo')
.on('option:no-foo', () => {
console.log('removing foo');
});
When using TypeScript, adding a command does not allow an explicit undefined
for an unwanted executable description (e.g
for a command with an action handler).
program
.command('action1', undefined, { noHelp: true }) // No longer valid
.command('action2', { noHelp: true }) // Correct
3.0.0-0 Prerelease / 2019-07-28
(Released as 3.0.0)
2.20.0 / 2019-04-02
- fix: resolve symbolic links completely when hunting for subcommands (#935)
- Update index.d.ts (#930)
- Update Readme.md (#924)
- Remove --save option as it isn't required anymore (#918)
- Add link to the license file (#900)
- Added example of receiving args from options (#858)
- Added missing semicolon (#882)
- Add extension to .eslintrc (#876)
2.19.0 / 2018-10-02
- Removed newline after Options and Commands headers (#864)
- Bugfix - Error output (#862)
- Fix to change default value to string (#856)
2.18.0 / 2018-09-07
- Standardize help output (#853)
- chmod 644 travis.yml (#851)
- add support for execute typescript subcommand via ts-node (#849)
2.17.1 / 2018-08-07
- Fix bug in command emit (#844)
2.17.0 / 2018-08-03
- fixed newline output after help information (#833)
- Fix to emit the action even without command (#778)
- npm update (#823)
2.16.0 / 2018-06-29
- Remove Makefile and
test/run
(#821)
- Make 'npm test' run on Windows (#820)
- Add badge to display install size (#807)
- chore: cache node_modules (#814)
- chore: remove Node.js 4 (EOL), add Node.js 10 (#813)
- fixed typo in readme (#812)
- Fix types (#804)
- Update eslint to resolve vulnerabilities in lodash (#799)
- updated readme with custom event listeners. (#791)
- fix tests (#794)
2.15.0 / 2018-03-07
- Update downloads badge to point to graph of downloads over time instead of duplicating link to npm
- Arguments description
2.14.1 / 2018-02-07
- Fix typing of help function
2.14.0 / 2018-02-05
- only register the option:version event once
- Fixes issue #727: Passing empty string for option on command is set to undefined
- enable eqeqeq rule
- resolves #754 add linter configuration to project
- resolves #560 respect custom name for version option
- document how to override the version flag
- document using options per command
2.13.0 / 2018-01-09
- Do not print default for --no-
- remove trailing spaces in command help
- Update CI's Node.js to LTS and latest version
- typedefs: Command and Option types added to commander namespace
2.12.2 / 2017-11-28
- fix: typings are not shipped
2.12.1 / 2017-11-23
- Move @types/node to dev dependency
2.12.0 / 2017-11-22
- add attributeName() method to Option objects
- Documentation updated for options with --no prefix
- typings:
outputHelp
takes a string as the first parameter
- typings: use overloads
- feat(typings): update to match js api
- Print default value in option help
- Fix translation error
- Fail when using same command and alias (#491)
- feat(typings): add help callback
- fix bug when description is add after command with options (#662)
- Format js code
- Rename History.md to CHANGELOG.md (#668)
- feat(typings): add typings to support TypeScript (#646)
- use current node
2.11.0 / 2017-07-03
- Fix help section order and padding (#652)
- feature: support for signals to subcommands (#632)
- Fixed #37, --help should not display first (#447)
- Fix translation errors. (#570)
- Add package-lock.json
- Remove engines
- Upgrade package version
- Prefix events to prevent conflicts between commands and options (#494)
- Removing dependency on graceful-readlink
- Support setting name in #name function and make it chainable
- Add .vscode directory to .gitignore (Visual Studio Code metadata)
- Updated link to ruby commander in readme files
2.10.0 / 2017-06-19
- Update .travis.yml. drop support for older node.js versions.
- Fix require arguments in README.md
- On SemVer you do not start from 0.0.1
- Add missing semi colon in readme
- Add save param to npm install
- node v6 travis test
- Update Readme_zh-CN.md
- Allow literal '--' to be passed-through as an argument
- Test subcommand alias help
- link build badge to master branch
- Support the alias of Git style sub-command
- added keyword commander for better search result on npm
- Fix Sub-Subcommands
- test node.js stable
- Fixes TypeError when a command has an option called
--description
- Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
- Add chinese Readme file
2.9.0 / 2015-10-13
- Add option
isDefault
to set default subcommand #415 @Qix-
- Add callback to allow filtering or post-processing of help text #434 @djulien
- Fix
undefined
text in help information close #414 #416 @zhiyelee
2.8.1 / 2015-04-22
- Back out
support multiline description
Close #396 #397
2.8.0 / 2015-04-07
- Add
process.execArg
support, execution args like --harmony
will be passed to sub-commands #387 @DigitalIO @zhiyelee
- Fix bug in Git-style sub-commands #372 @zhiyelee
- Allow commands to be hidden from help #383 @tonylukasavage
- When git-style sub-commands are in use, yet none are called, display help #382 @claylo
- Add ability to specify arguments syntax for top-level command #258 @rrthomas
- Support multiline descriptions #208 @zxqfox
2.7.1 / 2015-03-11
- Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.
2.7.0 / 2015-03-09
- Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
- Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
- Add support for camelCase on
opts()
. Close #353 @nkzawa
- Add node.js 0.12 and io.js to travis.yml
- Allow RegEx options. #337 @palanik
- Fixes exit code when sub-command failing. Close #260 #332 @pirelenito
- git-style
bin
files in $PATH make sense. Close #196 #327 @zhiyelee
2.6.0 / 2014-12-30
- added
Command#allowUnknownOption
method. Close #138 #318 @doozr @zhiyelee
- Add application description to the help msg. Close #112 @dalssoft
2.5.1 / 2014-12-15
2.5.0 / 2014-10-24
- add support for variadic arguments. Closes #277 @whitlockjc
2.4.0 / 2014-10-17
- fixed a bug on executing the coercion function of subcommands option. Closes #270
- added
Command.prototype.name
to retrieve command name. Closes #264 #266 @tonylukasavage
- added
Command.prototype.opts
to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
- fixed a bug on subcommand name. Closes #248 @jonathandelgado
- fixed function normalize doesn’t honor option terminator. Closes #216 @abbr
2.3.0 / 2014-07-16
- add command alias'. Closes PR #210
- fix: Typos. Closes #99
- fix: Unused fs module. Closes #217
2.2.0 / 2014-03-29
- add passing of previous option value
- fix: support subcommands on windows. Closes #142
- Now the defaultValue passed as the second argument of the coercion function.
2.1.0 / 2013-11-21
- add: allow cflag style option params, unit test, fixes #174
2.0.0 / 2013-07-18
- remove input methods (.prompt, .confirm, etc)
Older versions