Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

commanderはGitのCLIツールのような子コマンドを実装できる

commanderだと、GitのCLIツールのような子コマンドを実装することができます。

実際のところ

まず、ベースとなるファイルを用意します。
前回からの差異は"command"部分で、ここに子コマンドを記述します。

#!/usr/bin/env node

// ./sample
var args = require('commander');

args
  .option('-y --year [val]', 'broadcasted year.', (new Date()).getFullYear())
  .option('-n --noTitle','if true, output without title.')
  .option('-s --server','if true, open preview webpage.')
  .command('search [query]', 'search with optional query')
  .parse(process.argv);

var YEAR    = args.year
    ,NOTITLE = args.noTitle
    ,SERVER  = args.server;

console.log(args.year);

子コマンド自体は別ファイルに記載します。
親コマンド名が"sample"、子コマンド名が"search"なら"sample-search"といった名前にします

#!/usr/bin/env node
// ./sample-search.js
var program = require('commander')

program
  .version("0.01")
  .parse(process.argv);


var data  = program.args;

console.log(data);

以上を実行権限つきでやると……

$ chmod 701 sample
$ ls 
sample sample-search.js

以下のように、子コマンドの値は配列に格納されます。

$ ./sample search hoge fuga
2016
[ 'hoge', 'fuga' ]

親コマンドの引数は有効みたいですね。

$ ./sample search -y 2014 hoge fuga 
2014
[ 'hoge', 'fuga' ]

参考もと

github.com