アイコンリサイズ用のnpmパッケージを作ってみた その3
前回できたiconcというコマンドツールの実行メッセージが表示されないとこを改善したいと思います。ファイル処理のメッセージはEventEmitterのemitメソードを利用して実現します。
EventEmitter
についてはこの記事で詳しく説明しています:
早速実装をしてみます。修正するファイルは./index.js
となります:
// ./index.js
const util = require('util');
const EventEmitter = require('events').EventEmitter;
function Iconc(params) {
EventEmitter.call(this);
...
}
util.inherits(Iconc, EventEmitter);
これで、EventEmitter
の継承完了しました。とりあえず下記のイベントを定義します:
- EVENT_DATA ファイルが処理された時に発信
- EVENT_END 全てのファイルが処理された時に発信
const
で定義:
const EVENT_DATA = 'data';
const EVENT_END = 'end';
直接
emit('data')
みたいに、文字列を渡すことも可能だが、event名は定数にするのが一般的です。
リサイズ処理のところに:
...
im.resize(opt, err => {
if (err) return done(err);
// EVENT_DATAイベントを発信する、生成したファイルパスを添付します
self.emit(EVENT_DATA, dst);
return done(null, dst);
});
...
最後のコールバックに:
...
(err, files) => {
if (err) return done(err);
// EVENT_ENDイベントを発信
self.emit(EVENT_END);
return done();
});
...
イベント発信の実装が終わったら、bin/iconc
スクリプトで受信してメッセージを表示する実装します:
...
try {
const iconc = new Iconc(opt);
iconc.run(done);
// EVENT_DATAを受信する、生成したファイルのパスを表示する
iconc.on('data', (file) => console.log(`${' '.repeat(SPACE)}>>> `.green, file.white));
} catch (e) {
return done(e);
}
...
はい、これでメッセージは表示するようになります。再インストールしてみよう:
npm uninstall iconc -g
npm install . -g
面倒くさいと思ったら、直接
./bin/iconc
を$PATH
に入れても大丈夫です
今回は、リサイズ設定を指定したファイルから読み込んで実行する実装も検証してみたい、適当なところに下記のyamlファイルを作成します:
// test.yaml
icon-1:
w: 100
icon-2:
w: 120
icon-3:
w: 144
icon-4:
w: 228
icon-5:
p: 120
下記のコマンドで実行すると
iconc -f ~/path/to/your/pic.png -s test.yaml -d .
生成されたファイルのパスが表示されました!まだ細かいところは実装してないが、仕事の合間にちょこちょこ完成度を上げていきます。 今度はVagrantfileやDockerfileなどみたいにIconcFileをデフォルトに読み込む仕様にしたいと思います。