node.js 유용한 모듈 (2) – optimist

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

첫번째 연재에서는 dnode에 대해 다뤘다. – 그것은 자유 형태의 rpc library다.

이번에는 간결한  옵션 파서 라이브러리인 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!

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

다음의 HTML 태그와 속성을 사용할 수 있습니다: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>