Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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