readlineで標準入力を受け付ける(対話型シェル)

  • このエントリーをはてなブックマークに追加

Node.jsで書いたコマンドラインツールに対話型のシェルを設けたかったので試してみた。
(参照にしたgistほぼそのままなのだけれども)

アロー関数で書き直そうとしたのだけれども詰まったので一旦メモとして残しておく。

var readline = require('readline');
function Cli(handler) {
this.handler = handler;
}
Cli.prototype.run = function() {
var self = this;
var rli = readline.createInterface(process.stdin, process.stdout);
rli.setPrompt('> ');
rli.on('line', function(line) {
var args = line.split(/\s+/), cmd = args.shift();
if (self.handler[cmd]) {
self.handler[cmd].call(rli, args, function(err, res) {
console.log(res);
rli.prompt();
});
} else if (cmd.length > 0) {
console.log('cmd not found.');
rli.prompt();
} else {
rli.prompt();
}
rli.prompt();
}).on('close', function() {
console.log('');
process.stdin.destroy();
});
rli.prompt();
};
function Handler() {}
Handler.prototype.echo = function(args, fn) {
fn(null, args);
};
(new Cli(new Handler())).run();

参照

(Visited 4 times, 1 visits today)
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*