command-line-parser
Version:
Simple lightweight function takes an array of command-line arguments and returns a parsed object
123 lines (113 loc) • 3.7 kB
Markdown
# command-line-parser
This statement:
```
const argsObj = require('command-line-parser')();
```
returns this ```argsObj``` object:
```
{
v: true,
debug: true,
host: 'there.com',
port: '8081',
_args: [ 'myfile1', 'myfile2' ]
}
```
when invoked with:
```
node ./myscript.js myfile1 -v -debug -host there.com -port 8081 myfile2
```
This simple lightweight module exports a default function that takes an array of command-line arguments and returns a parsed object (a bit simpler than the venerable ```minimist``` or ```commander```).
### Arguments as keys and values
A key argument (starts with a dash) looks to the next argument for a value, such as ```-foo bar```. If ```foo``` does not find a value, a default value of ```true``` will be set.
There's a few ways in which ```foo``` might not find a value:
* the following argument also starts with a dash, as in ```-foo -hey```
* there are no more arguments
* ```foo``` is set in ```booleanKeys``` of config (an optional argument):
```
const argsObj = require('command-line-parser')({
booleanKeys: [ 'foo' ]
});
```
A key with multiple leading dashes such as ```--debug``` will be the same as ```-debug``` (with the exception of overriding the optional argument ```allowKeyGrouping``` described below).
A key with embedded dashes or spaces will be converted to ```camelCase``` from ```camel-case```.
Arguments that don't fulfill the role of a key or a value will be added in an array to a key called ```_args``` in the parsed object.
To avoid any arguments intended for ```_args``` from becoming the unintentional value of a preceding boolean key, either specify that boolean key in ```booleanKeys``` of config, or follow that boolean key with a placeholder argument such as a single ```-``` or double dash ```--``` on the command line.
```
node ./myscript.js -d -- foo1 foo2 foo3
```
### Embedding numerical values within keys
Instead of having to separate a numerical argument from its key:
```
node ./myscript.js -n 8
```
it may be embedded in the key:
```
node ./myscript.js -n8
```
by setting ```allowEmbeddedValues``` in the config:
```
const argsObj = require('command-line-parser')({
allowEmbeddedValues: true
});
```
to give the result
```
{
n: 8
}
```
### Single letter key grouping
To parse a leading-dash argument such as ```-abc``` as single-letter keys instead of one multi-letter key, then set ```allowKeyGrouping``` in config so that
```
node ./myscript.js -abc
```
when parsed by
```
const argsObj = require('command-line-parser')({
allowKeyGrouping: true
});
```
gives the result
```
{
a: true,
b: true,
c: true
}
```
```allowKeyGrouping``` can be overridden on the command-line by prefixing the argument with double-dashes, so that
```
node ./myscript.js --abc
```
becomes
```
{
abc: true
}
```
### Passing configuration
An optional configuration object may be passed in that will override these default values:
```
const argsObj = require('command-line-parser')({
args = process.argv.slice(2), // skip the binary and script file args
booleanKeys = [],
allowKeyGrouping: false,
allowEmbeddedValues: false
});
```
### Installation and testing
Install with ```npm install command-line-parser```.
Test via ```npm test``` (and see test/index.js for some examples).
### Useful destructuring assignment pattern
This is a common pattern using destructuring assignment (available in ES6 or via Babel) which can be useful here, especially with default values, and perhaps renaming ```_args```:
```
const {
v,
debug = false,
host = 'default.com',
port = '80',
_args: files = []
} = argsObj ;
```
will assign the locally scoped constant variables ```v```, ```debug```, ```host```, ```port```, and ```files```.