4.8 KiB
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 mriUsage
$ demo-cli --foo --bar=baz -mtv -- hello worldconst mri = require('mri');
const argv = process.argv.slice(2);
mri(argv);
//=> { _: ['hello', 'world'], foo:true, bar:'baz', m:true, t:true, v:true }
mri(argv, { boolean:['bar'] });
//=> { _: ['baz', 'hello', 'world'], foo:true, bar:true, m:true, t:true, v:true }
mri(argv, {
alias: {
b: 'bar',
foo: ['f', 'fuz']
}
});
//=> { _: ['hello', 'world'], foo:true, f:true, fuz:true, b:'baz', bar:'baz', m:true, t:true, v:true }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 Strings 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
Booleans.
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']);
//=> { _:[], foo:'bar' }
mri(['--foo', 'bar'], {
default: { foo:true, baz:'hello', bat:42 }
});
//=> { _:['bar'], foo:true, baz:'hello', bat:42 }Note: Because
--foohas a default oftrue, its output is cast to a Boolean. This means thatfoo=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
Strings.
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:
mrionly checks for unknown flags ifoptions.unknownandoptions.aliasare populated. Otherwise, everything will be accepted.
Comparisons
minimist
mriis 5x faster (see benchmarks)Numerical values are cast as
Numbers when possible- A key (and its aliases) will always honor
opts.booleanoropts.string
- A key (and its aliases) will always honor
Short flag groups are treated as
Booleans by default: ```js minimist([‘-abc’, ‘hello’]); //=> { _:[], a:’‘, b:’‘, c:’hello’ }mri([‘-abc’, ‘hello’]); //=> { _:[], a:true, b:true, c:‘hello’ } ```
The
opts.unknownbehaves differently:- Unlike
minimist,mriwill not continue continue parsing after encountering an unknown flag
- Unlike
Missing
options:opts.stopEarlyopts['--']
Ignores newlines (
\n) within args (see test)Ignores slashBreaks within args (see test)
Ignores dot-nested flags (see test)
yargs-parser
mriis 40x faster (see benchmarks)- Numerical values are cast as
Numbers when possible- A key (and its aliases) will always honor
opts.booleanoropts.string
- A key (and its aliases) will always honor
- Missing
options:opts.arrayopts.configopts.coerceopts.countopts.envPrefixopts.nargopts.normalizeopts.configurationopts.numberopts['--']
- Missing
parser.detailed()method - No additional configuration object
- Added
options.unknownfeature
Benchmarks
Running Node.js v10.13.0
minimist x 312,417 ops/sec ±0.85% (93 runs sampled)
mri x 1,641,208 ops/sec ±0.24% (93 runs sampled)
nopt x 910,276 ops/sec ±1.11% (88 runs sampled)
yargs-parser x 40,943 ops/sec ±1.37% (93 runs sampled)
License
MIT © Luke Edwards