LoginSignup
46
43

More than 5 years have passed since last update.

node.jsでファイルの変更を検出して何かする

Posted at

「ファイルの変更を監視して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.

ファイルの変更監視としては以上です。

46
43
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
43