|
|
- # DEPRECATION NOTICE
-
- I don't want to maintain this module anymore since I just use
- [minimist](https://npmjs.org/package/minimist), the argument parsing engine,
- directly instead nowadays.
-
- See [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed
- successor to optimist.
-
- [![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs)
-
- You should also consider [nomnom](https://github.com/harthur/nomnom).
-
- optimist
- ========
-
- Optimist is a node.js library for option parsing for people who hate option
- parsing. More specifically, this module is for people who like all the --bells
- and -whistlz of program usage but think optstrings are a waste of time.
-
- With optimist, option parsing doesn't have to suck (as much).
-
- [![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)
-
- examples
- ========
-
- With Optimist, the options are just a hash! No optstrings attached.
- -------------------------------------------------------------------
-
- xup.js:
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist').argv;
-
- if (argv.rif - 5 * argv.xup > 7.138) {
- console.log('Buy more riffiwobbles');
- }
- else {
- console.log('Sell the xupptumblers');
- }
- ````
-
- ***
-
- $ ./xup.js --rif=55 --xup=9.52
- Buy more riffiwobbles
-
- $ ./xup.js --rif 12 --xup 8.1
- Sell the xupptumblers
-
- ![This one's optimistic.](http://substack.net/images/optimistic.png)
-
- But wait! There's more! You can do short options:
- -------------------------------------------------
-
- short.js:
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist').argv;
- console.log('(%d,%d)', argv.x, argv.y);
- ````
-
- ***
-
- $ ./short.js -x 10 -y 21
- (10,21)
-
- And booleans, both long and short (and grouped):
- ----------------------------------
-
- bool.js:
-
- ````javascript
- #!/usr/bin/env node
- var util = require('util');
- var argv = require('optimist').argv;
-
- if (argv.s) {
- util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');
- }
- console.log(
- (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')
- );
- ````
-
- ***
-
- $ ./bool.js -s
- The cat says: meow
-
- $ ./bool.js -sp
- The cat says: meow.
-
- $ ./bool.js -sp --fr
- Le chat dit: miaou.
-
- And non-hypenated options too! Just use `argv._`!
- -------------------------------------------------
-
- nonopt.js:
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist').argv;
- console.log('(%d,%d)', argv.x, argv.y);
- console.log(argv._);
- ````
-
- ***
-
- $ ./nonopt.js -x 6.82 -y 3.35 moo
- (6.82,3.35)
- [ 'moo' ]
-
- $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz
- (0.54,1.12)
- [ 'foo', 'bar', 'baz' ]
-
- Plus, Optimist comes with .usage() and .demand()!
- -------------------------------------------------
-
- divide.js:
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist')
- .usage('Usage: $0 -x [num] -y [num]')
- .demand(['x','y'])
- .argv;
-
- console.log(argv.x / argv.y);
- ````
-
- ***
-
- $ ./divide.js -x 55 -y 11
- 5
-
- $ node ./divide.js -x 4.91 -z 2.51
- Usage: node ./divide.js -x [num] -y [num]
-
- Options:
- -x [required]
- -y [required]
-
- Missing required arguments: y
-
- EVEN MORE HOLY COW
- ------------------
-
- default_singles.js:
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist')
- .default('x', 10)
- .default('y', 10)
- .argv
- ;
- console.log(argv.x + argv.y);
- ````
-
- ***
-
- $ ./default_singles.js -x 5
- 15
-
- default_hash.js:
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist')
- .default({ x : 10, y : 10 })
- .argv
- ;
- console.log(argv.x + argv.y);
- ````
-
- ***
-
- $ ./default_hash.js -y 7
- 17
-
- And if you really want to get all descriptive about it...
- ---------------------------------------------------------
-
- boolean_single.js
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist')
- .boolean('v')
- .argv
- ;
- console.dir(argv);
- ````
-
- ***
-
- $ ./boolean_single.js -v foo bar baz
- true
- [ 'bar', 'baz', 'foo' ]
-
- boolean_double.js
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist')
- .boolean(['x','y','z'])
- .argv
- ;
- console.dir([ argv.x, argv.y, argv.z ]);
- console.dir(argv._);
- ````
-
- ***
-
- $ ./boolean_double.js -x -z one two three
- [ true, false, true ]
- [ 'one', 'two', 'three' ]
-
- Optimist is here to help...
- ---------------------------
-
- You can describe parameters for help messages and set aliases. Optimist figures
- out how to format a handy help string automatically.
-
- line_count.js
-
- ````javascript
- #!/usr/bin/env node
- var argv = require('optimist')
- .usage('Count the lines in a file.\nUsage: $0')
- .demand('f')
- .alias('f', 'file')
- .describe('f', 'Load a file')
- .argv
- ;
-
- var fs = require('fs');
- var s = fs.createReadStream(argv.file);
-
- var lines = 0;
- s.on('data', function (buf) {
- lines += buf.toString().match(/\n/g).length;
- });
-
- s.on('end', function () {
- console.log(lines);
- });
- ````
-
- ***
-
- $ node line_count.js
- Count the lines in a file.
- Usage: node ./line_count.js
-
- Options:
- -f, --file Load a file [required]
-
- Missing required arguments: f
-
- $ node line_count.js --file line_count.js
- 20
-
- $ node line_count.js -f line_count.js
- 20
-
- methods
- =======
-
- By itself,
-
- ````javascript
- require('optimist').argv
- `````
-
- will use `process.argv` array to construct the `argv` object.
-
- You can pass in the `process.argv` yourself:
-
- ````javascript
- require('optimist')([ '-x', '1', '-y', '2' ]).argv
- ````
-
- or use .parse() to do the same thing:
-
- ````javascript
- require('optimist').parse([ '-x', '1', '-y', '2' ])
- ````
-
- The rest of these methods below come in just before the terminating `.argv`.
-
- .alias(key, alias)
- ------------------
-
- Set key names as equivalent such that updates to a key will propagate to aliases
- and vice-versa.
-
- Optionally `.alias()` can take an object that maps keys to aliases.
-
- .default(key, value)
- --------------------
-
- Set `argv[key]` to `value` if no option was specified on `process.argv`.
-
- Optionally `.default()` can take an object that maps keys to default values.
-
- .demand(key)
- ------------
-
- If `key` is a string, show the usage information and exit if `key` wasn't
- specified in `process.argv`.
-
- If `key` is a number, demand at least as many non-option arguments, which show
- up in `argv._`.
-
- If `key` is an Array, demand each element.
-
- .describe(key, desc)
- --------------------
-
- Describe a `key` for the generated usage information.
-
- Optionally `.describe()` can take an object that maps keys to descriptions.
-
- .options(key, opt)
- ------------------
-
- Instead of chaining together `.alias().demand().default()`, you can specify
- keys in `opt` for each of the chainable methods.
-
- For example:
-
- ````javascript
- var argv = require('optimist')
- .options('f', {
- alias : 'file',
- default : '/etc/passwd',
- })
- .argv
- ;
- ````
-
- is the same as
-
- ````javascript
- var argv = require('optimist')
- .alias('f', 'file')
- .default('f', '/etc/passwd')
- .argv
- ;
- ````
-
- Optionally `.options()` can take an object that maps keys to `opt` parameters.
-
- .usage(message)
- ---------------
-
- Set a usage message to show which commands to use. Inside `message`, the string
- `$0` will get interpolated to the current script name or node command for the
- present script similar to how `$0` works in bash or perl.
-
- .check(fn)
- ----------
-
- Check that certain conditions are met in the provided arguments.
-
- If `fn` throws or returns `false`, show the thrown error, usage information, and
- exit.
-
- .boolean(key)
- -------------
-
- Interpret `key` as a boolean. If a non-flag option follows `key` in
- `process.argv`, that string won't get set as the value of `key`.
-
- If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be
- `false`.
-
- If `key` is an Array, interpret all the elements as booleans.
-
- .string(key)
- ------------
-
- Tell the parser logic not to interpret `key` as a number or boolean.
- This can be useful if you need to preserve leading zeros in an input.
-
- If `key` is an Array, interpret all the elements as strings.
-
- .wrap(columns)
- --------------
-
- Format usage output to wrap at `columns` many columns.
-
- .help()
- -------
-
- Return the generated usage string.
-
- .showHelp(fn=console.error)
- ---------------------------
-
- Print the usage data using `fn` for printing.
-
- .parse(args)
- ------------
-
- Parse `args` instead of `process.argv`. Returns the `argv` object.
-
- .argv
- -----
-
- Get the arguments as a plain old object.
-
- Arguments without a corresponding flag show up in the `argv._` array.
-
- The script name or node command is available at `argv.$0` similarly to how `$0`
- works in bash or perl.
-
- parsing tricks
- ==============
-
- stop parsing
- ------------
-
- Use `--` to stop parsing flags and stuff the remainder into `argv._`.
-
- $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4
- { _: [ '-c', '3', '-d', '4' ],
- '$0': 'node ./examples/reflect.js',
- a: 1,
- b: 2 }
-
- negate fields
- -------------
-
- If you want to explicity set a field to false instead of just leaving it
- undefined or to override a default you can do `--no-key`.
-
- $ node examples/reflect.js -a --no-b
- { _: [],
- '$0': 'node ./examples/reflect.js',
- a: true,
- b: false }
-
- numbers
- -------
-
- Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to
- one. This way you can just `net.createConnection(argv.port)` and you can add
- numbers out of `argv` with `+` without having that mean concatenation,
- which is super frustrating.
-
- duplicates
- ----------
-
- If you specify a flag multiple times it will get turned into an array containing
- all the values in order.
-
- $ node examples/reflect.js -x 5 -x 8 -x 0
- { _: [],
- '$0': 'node ./examples/reflect.js',
- x: [ 5, 8, 0 ] }
-
- dot notation
- ------------
-
- When you use dots (`.`s) in argument names, an implicit object path is assumed.
- This lets you organize arguments into nested objects.
-
- $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5
- { _: [],
- '$0': 'node ./examples/reflect.js',
- foo: { bar: { baz: 33 }, quux: 5 } }
-
- short numbers
- -------------
-
- Short numeric `head -n5` style argument work too:
-
- $ node reflect.js -n123 -m456
- { '3': true,
- '6': true,
- _: [],
- '$0': 'node ./reflect.js',
- n: 123,
- m: 456 }
-
- installation
- ============
-
- With [npm](http://github.com/isaacs/npm), just do:
- npm install optimist
-
- or clone this project on github:
-
- git clone http://github.com/substack/node-optimist.git
-
- To run the tests with [expresso](http://github.com/visionmedia/expresso),
- just do:
-
- expresso
-
- inspired By
- ===========
-
- This module is loosely inspired by Perl's
- [Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).
|