Node.js(TypeScript)でCLI環境を構築

必要なら適宜JavaScriptに読み替える。




CLI向けライブラリ



いくつかある。

https://github.com/substack/minimist
https://github.com/tj/commander.js/
https://github.com/cacjs/cac

commander.jsがスター数が一番多いのでこれにする(開発も継続されている模様)

npm i commander -D



commander.jsの使い方



基本


import * as commander from "commander"

/**
 * USAGE: node devtools/test.js
 */

commander
  .version("0.0.1", "-v, --version")
  .option("-t, --test", "test option")
  .parse(process.argv)

if (commander.test) {
  console.log("add test option")
}
console.log("Hello CLI")


上記で
node devtools/test.js
で"Hello CLI"と出力。
node devtools/test.js -v
でバージョン情報。
node devtools/test.js -h
でヘルプが表示される。

.option...で任意の引数を追加できる。
第1引数にオプションの識別名をカンマ区切りで指定。
第2引数がヘルプを表示した時に出力される。
node devtools/test.js -t
を実行すると
add test option
Hello CLI
と表示される。


入力を受け付ける(対話型インタフェース)


readline-sync を使用すると対話型のインタフェースが作れるようだ。
https://github.com/anseki/readline-sync
npm i readline-sync -D


import * as commander from "commander"
import * as readlineSync from "readline-sync"

/**
 * USAGE: node devtools/test.js
 */

commander
  .version("0.0.1", "-v, --version")
  .parse(process.argv)

const input = readlineSync.prompt()
console.log("Hello " + input)

readlineSync.prompt() で入力待ち。



コンソールの文字に色を付ける



charkを使用する。
https://github.com/chalk/chalk

import chalk from "chalk"
import * as commander from "commander"

/**
 * USAGE: node devtools/test.js
 */

commander
  .version("0.0.1", "-v, --version")
  .parse(process.argv)

console.log(chalk.blue("Hello CLI"))

chalk.xxxx("文字列")で指定した色で表示される。背景の色も変更可能。

以上で大体のことはできるはず。



参考




https://qiita.com/tom-u/items/34cf26fa4fa129f93095
https://qiita.com/0x50/items/723d2d15592aa5a81763
https://wp-kyoto.net/try-commander-to-make-npm-cli-tools

2018年8月31日金曜日