원문 링크 - http://www.catonmat.net/blog/nodejs-modules-optimist/

1회 연재 - dnode (RPC 라이브러리)

이번에는 간결한  옵션 파서 라이브러리인 node-optimist를 소개할 것이다. 이 라이브러리는 Browserling and Testling의 공동설립자인 James Halliday (SubStack)에 의해 작성됐다.

얼마나 간결한 옵션 파서인지 궁금하지 않은가? 다음을 살펴보자.

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

이게 끝이다. 모든 옵션들은 파싱되어 argv에 저장된다.

이제 다양한 유스케이스들에 대해 살펴보자. 우선, 이 모듈은 긴 인자 파싱을 지원한다.

#!/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');
}

지금 위의 스크립트를 --rif--xup 인자와 함께 실행하면 다음과 같은 결과를 얻을 수 있다.

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

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

다음으로 그것은 짧은 인자들을 지원한다:

#!/usr/bin/env node
var argv = require('optimist').argv;
console.log('(%d,%d)', argv.x, argv.y);

여기서 -x-y와 같은 짧은 인자를 사용할 수 있다.

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

node-optimist 모듈은 또한 불린 인자를 지원한다.

#!/usr/bin/env node
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 ? '.' : '')
);

이제 다음과 같이 다양한 옵션을 가진 스크립트를 실행할 수 있다.

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

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

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

다음은, -(하이픈)으로 시작되지 않은 옵션을 argv._를 통해 처리하는 예제다.

#!/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' ]

Optimist는 또는 .usage().demand()함수들를 제공한다.

#!/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);

위 예제는 인자 xy를 필요로 한다. 만약 그것이 넘겨지지 않는다면, 다음과 같이 사용법이 자동으로 출력될 것이다.

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

Optimist는 .default()를 통해 디폴트 인자를 사용할 수 있다.

#!/usr/bin/env node
var argv = require('optimist')
    .default('x', 10)
    .default('y', 10)
    .argv
;
console.log(argv.x + argv.y);

위 예제는  x and y 의 디폴트 값을 10으로 설정한 것이다.

$ ./default_singles.js -x 5
15

이밖에도 여러분은 isaacs의 nopt를 사용해서 인자의 데이터 타입을 강제하거나 여러 인자들을 쉽게 다룰 수 있다. 또는 nomnom를 사용해서 인자들을 축약하거나 해시 형태로 사용할 수 있다.

[역자주 - 아래는 원저자의 요청에 따라 원문 그대로 실습니다. 관심있으신 분들은 해당 원저자의 블로그나 트위터를 팔로우 하시기 바랍니다.]

If you love these articles, subscribe to my blog for more, follow me on Twitter to find about my adventures, and watch me produce code on GitHub!