LoginSignup
35
34

More than 5 years have passed since last update.

タスクランナーの連続実行を抑止する: gulp.js, Grunt

Last updated at Posted at 2014-08-23

MacやWindowsのテキストエディタ・画像編集ツールを使っていると、ファイルの保存時に書き込みが2度続けて起きる(と判定される)場合があります。例えば、Espresso, Coda, SublimeTextほかを使っていて、ソースコードを保存する際に、タスクランナーのログを見ると2度走っているケースなど。

gulp.jsGruntといった、Node.js系のタスクランナーでは、ファイル監視にgazeを使っています。このgazeに適切なオプションを渡せば、この問題は解決されます。以下、その説明です。

gulp.js の場合

通常、こんな感じでwatchしていると思いますが、第二引数にgazeのオプションを渡すことができます。 cf. 公式APIドキュメント

var gulp = require("gulp");

gulp.task('watch', function(){
  gulp.watch('coffee/*.coffee', ['coffee']);
});

例えば、再実行を10秒間抑制したければ、次のようにオプションを指定します。

var gulp = require("gulp");

gulp.task('watch', function(){
  var gaze_opt = {
    debounceDelay: 10000 // wait 10 sec after the last run
  };
  gulp.watch('coffee/*.coffee', gaze_opt, ['coffee']);
});

参考: gazeで設定できるオプション

debounceDelay以外にも、gazeに渡せるオプションがあります。

オプション 説明
interval integer fs.watchFile に渡すインターバル
debounceDelay integer 同じファイル/イベントの処理が完了した後、再度実行されるまでのディレイ (ミリ秒)
mode string 'auto': デフォルト
'watch': 強制的にネイティブAPIを使う
'poll': 強制的にポーリング
cwd string ワーキングディレクトリの指定。デフォルトは process.cwd()

詳しくは、gazeのドキュメントを参照のこと。

Grunt の場合

Gruntは、公式プラグインのgrunt-contrib-watchからgazeを利用します。

watch: {
  scripts: {
    files: 'coffee/*.coffee',
    tasks: ['coffee'],
    options: {
      debounceDelay: 10000, // wait 10 sec after the last run
    },
  },
},

上記の例では、先ほどのgulp.jsの例と同様に10秒間、タスクの再実行を抑制しています。デフォルトは500ミリ秒です。

Gruntの場合も、前項の「gazeで設定できるオプション」を設定できるほか、いくつかの拡張があります。詳しくは、grunt-contrib-watch のドキュメントをどうぞ。

35
34
0

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
35
34