「ファイルの変更を監視してUpdateされたら、そのファイルをSFTPする」という要件が出てきたのでどう実現しようかと考え、最初Gulp使おうかなと思ったのですが、そもそもnode.jsでやったほうが汎用性が高いかな・・・と思い、node.jsでやることにしました。
SFTPであれ、なんであれ、まずはファイル変更のイベントを拾えないと行けないので、そこまでを書きます。
##方針
いくつかのやり方があるようですが、その用途に特化したchokidarというライブラリがあるようなのでそれを利用しました。
##環境
- node.jsはこの機会にLTSの4.3.0を利用しました。
- テストはMac上で、本番はCentOS6.x(6.7)です。
##インストール
- chokidarのインストール
- sshのkeyを指定するのに必要なのでfsもインストールします。
npm install chokidar --save
npm install fs
##実装
watch.jsとして下記のようにしました。on().on().on()というようにチェーンメソッドで繋げることも出来うようですが、ここでは、on('ready',function(){});のクロージャの中に定義することにしました。
カレントにdataというフォルダを作成し、その中を監視します。
//require
var chokidar = require("chokidar");
//chokidarの初期化
var watcher = chokidar.watch('./data/',{
ignored:/[\/\\]\./,
persistent:true
});
//イベント定義
watcher.on('ready',function(){
//準備完了
console.log("ready watching...");
//ファイルの追加
watcher.on('add',function(path){
console.log(path + " added.");
});
//ファイルの編集
watcher.on('change',function(path){
console.log(path + " changed.");
uploadFile();
});
});
##実行
下記のように実行します。
node watch.js
dataフォルダに対して、test2.txtを追加し、さらに、変更すると下記のように表示されます。
どうやら無事、イベントが拾えているようです。
ready watching...
data/test2.txt added.
data/test2.txt changed.
ファイルの変更監視としては以上です。