Fork me on GitHub

2. Node.js модули, о которых вы должны знать: optimist

Всем привет! Это второй пост в моей новой серии статей Node.js модули, о которых вы должны знать.

Первый пост был про dnode — фристайл RPC библиотеку для node.js.

На этот раз я представляю node-optimist — легковесную библиотеку для парсинга опций в командной строке. Автором является мой партнер (сооснователь) по Browserling и TestlingJames Halliday.

Интересно, насколько лёгкий может быть разбор аргументов коммандной строки? Оцените:

var argv = require('optimist').argv;

И всё! Все опции проанализированы и помещены в argv.

2.1. Длинные аргументы

Вот еще несколько примеров использования. Самое главное то, что библиотека поддерживает длинные аргументы:

var argv = require('optimist').argv;

if (argv.rif - 5 * argv.xup > 7.138) {
    console.log('Buy more riffiwobbles');
}
else {
    console.log('Sell the xupptumblers');
}

Данный скрипт вы можете запустить с аргументами --rif и --xup:

$ node ./xup.js --rif=55 --xup=9.52
Buy more riffiwobbles

$ node ./xup.js --rif 12 --xup 8.1
Sell the xupptumblers

2.2. Короткие аргументы

Кроме этого, библиотека поддерживает короткие аргументы:

var argv = require('optimist').argv;
console.log('(%d,%d)', argv.x, argv.y);

Теперь вы можете использовать аргументы -x, -y:

$ node ./short.js -x 10 -y 21
(10,21)

2.3. Логические аргументы

Node-optimist так же поддерживает логические аргументы всех типов: короткие, длинные и сгруппированные:

var argv = require('optimist').argv;

if (argv.s) {
    console.log(argv.fr ? 'Le chat dit: ' : 'The cat says: ');
}
console.log(
    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')
);

Данный скрипт можеь быть вызван с различными аргументами:

$ node ./bool.js -s
The cat says: meow

$ node ./bool.js -sp
The cat says: meow.

$ node ./bool.js -sp --fr
Le chat dit: miaou.

2.4. «Без-дефисные» аргументы

«Без-дефисные» аргументы легко получить через argv._:

var argv = require('optimist').argv;

console.log('(%d,%d)', argv.x, argv.y);
console.log(argv._);

Пример использования:

$ node ./nonopt.js -x 6.82 -y 3.35 moo
(6.82,3.35)
[ 'moo' ]

$ node ./nonopt.js foo -x 0.54 bar -y 1.12 baz
(0.54,1.12)
[ 'foo', 'bar', 'baz' ]

2.5. Описание и обязательные аргументы

Optimist поставляется с двумя функциями .usage() и .demand():

var argv = require('optimist')
    .usage('Usage: $0 -x [num] -y [num]')
    .demand(['x','y'])
    .argv;

console.log(argv.x / argv.y);

Аргументы x и y являются обязательными. Если они не указаны, то будет автоматически выведено на экран описание использования:

$ node ./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

2.6. Значения «по умолчанию»

Optimist так же поддерживает значения «по умолчанию» с помощью функции .default():

var argv = require('optimist')
    .default('x', 10)
    .default('y', 10)
    .argv;

console.log(argv.x + argv.y);

Теперь x и y будут принимать значение 10, если их не указать явно:

$ node ./default_singles.js -x 5
15

Наслаждайтесь этим незнакомцем:

Модули node.js, о которых вы должны знать: node-optimist.

2.7. Альтернативы

В качестве альтернативы вы можете использовать nopt от isaacs, который позволяет контролировать типы данных для аргументов и может использоваться для разбора большого количества аргументов. Еще одной альтернативой может стать модуль nomnom, который позволяет описывать аргументы в виде хэшей.

Примечание

Еще одной альтернативой является библиотека commander.js. (прим. переводчика)