mri
Quickly scan for CLI flags and arguments
This is a fast and lightweight alternative to minimist
and yargs-parser
.
It only exists because I find that I usually don't need most of what minimist
and yargs-parser
have to offer. However, mri
is similar enough that it might function as a "drop-in replacement" for you, too!
See Comparisons for more info.
Install
$ npm install --save mri
Usage
$ demo-cli --foo --bar=baz -mtv -- hello world
const mri = require('mri');
const argv = process.argv.slice(2);
mri(argv);
mri(argv, { boolean:['bar'] });
mri(argv, {
alias: {
b: 'bar',
foo: ['f', 'fuz']
}
});
API
mri(args, options)
Return: Object
args
Type: Array
Default: []
An array of arguments to parse. For CLI usage, send process.argv.slice(2)
. See process.argv
for info.
options.alias
Type: Object
Default: {}
An object of keys whose values are String
s or Array<String>
of aliases. These will be added to the parsed output with matching values.
options.boolean
Type: Array|String
Default: []
A single key (or array of keys) that should be parsed as Boolean
s.
options.default
Type: Object
Default: {}
An key:value
object of defaults. If a default is provided for a key, its type (typeof
) will be used to cast parsed arguments.
mri(['--foo', 'bar']);
mri(['--foo', 'bar'], {
default: { foo:true, baz:'hello', bat:42 }
});
Note: Because --foo
has a default of true
, its output is cast to a Boolean. This means that foo=true
, making 'bar'
an extra argument (_
key).
options.string
Type: Array|String
Default: []
A single key (or array of keys) that should be parsed as String
s.
options.unknown
Type: Function
Default: undefined
Callback that is run when a parsed flag has not been defined as a known key or alias. Its only parameter is the unknown flag itself; eg --foobar
or -f
.
Once an unknown flag is encountered, parsing will terminate, regardless of your return value.
Note: mri
only checks for unknown flags if options.unknown
and options.alias
are populated. Otherwise, everything will be accepted.
Comparisons
minimist
yargs-parser
mri
is 40x faster (see benchmarks)- Numerical values are cast as
Number
s when possible
- A key (and its aliases) will always honor
opts.boolean
or opts.string
- Missing
options
:
opts.array
opts.config
opts.coerce
opts.count
opts.envPrefix
opts.narg
opts.normalize
opts.configuration
opts.number
opts['--']
- Missing
parser.detailed()
method - No additional configuration object
- Added
options.unknown
feature
Benchmarks
Running Node.js v10.13.0
Load Times:
nopt 3.179ms
yargs-parser 2.137ms
minimist 0.746ms
mri 0.517ms
Benchmark:
minimist x 328,747 ops/sec ±1.09% (89 runs sampled)
mri x 1,622,801 ops/sec ±0.94% (92 runs sampled)
nopt x 888,223 ops/sec ±0.22% (92 runs sampled)
yargs-parser x 30,538 ops/sec ±0.81% (91 runs sampled)
License
MIT © Luke Edwards