ファイルの監視#

watch() APIは、ファイルシステムウォッチャーを使用してglobタスクに接続します。globに一致するファイルの変更を監視し、変更が発生するとタスクを実行します。タスクが非同期完了を通知しない場合、2回目は実行されません。

このAPIは、最も一般的な使用法に基づいて、組み込みの遅延とキューイングを提供します。

const { watch, series } = require('gulp');
function clean(cb) {
// 本文省略
cb();
}
function javascript(cb) {
// 本文省略
cb();
}
function css(cb) {
// 本文省略
cb();
}
exports.default = function() {
// 単一のタスクを使用できます
watch('src/*.css', css);
// または合成されたタスク
watch('src/*.js', series(clean, javascript));
};

警告: 同期処理を避ける#

ウォッチャーのタスクは、タスクシステムに登録されたタスクのように、同期することはできません。同期タスクを渡すと、完了を判断できず、タスクは二度と実行されません。まだ実行中であると想定されます。

ファイルウォッチャーはNodeプロセスを実行し続けるため、エラーや警告メッセージは表示されません。プロセスが終了しないため、タスクが完了したのか、それとも実行に非常に時間がかかっているだけなのかを判断できません。

監視対象イベント#

デフォルトでは、ウォッチャーはファイルが作成、変更、または削除されるたびにタスクを実行します。異なるイベントを使用する必要がある場合は、watch()を呼び出すときにeventsオプションを使用できます。利用可能なイベントは、'add''addDir''change''unlink''unlinkDir''ready''error'です。さらに、'all'は、'ready'および'error'以外のすべてのイベントを表すために利用できます。

const { watch } = require('gulp');
exports.default = function() {
// すべてのイベントが監視されます
watch('src/*.js', { events: 'all' }, function(cb) {
// 本文省略
cb();
});
};

初回実行#

watch()を呼び出すと、タスクは実行されず、最初のファイルの変更を待ちます。

最初のファイル変更前にタスクを実行するには、ignoreInitialオプションをfalseに設定します。

const { watch } = require('gulp');
exports.default = function() {
// タスクは起動時に実行されます
watch('src/*.js', { ignoreInitial: false }, function(cb) {
// 本文省略
cb();
});
};

キューイング#

watch()は、現在実行中のタスクが同時に再実行されないことを保証します。ウォッチャーのタスクが実行中にファイルの変更が行われた場合、タスクが完了すると別の実行がキューに登録され実行されます。一度にキューに入れられる実行は1つだけです。

キューイングを無効にするには、queueオプションをfalseに設定します。

const { watch } = require('gulp');
exports.default = function() {
// タスクは、行われたすべての変更に対して(同時に)実行されます
watch('src/*.js', { queue: false }, function(cb) {
// 本文省略
cb();
});
};

遅延#

ファイルの変更時、ウォッチャータスクは200ミリ秒の遅延時間が経過するまで実行されません。これは、ファイルの一括変更(例:検索と置換)時にタスクが早すぎるタイミングで開始されるのを防ぐためです。

遅延時間を調整するには、delayオプションに正の整数を設定します。

const { watch } = require('gulp');
exports.default = function() {
// 最初の変更から500ミリ秒経過するまでタスクは実行されません
watch('src/*.js', { delay: 500 }, function(cb) {
// 本文省略
cb();
});
};

ウォッチャーインスタンスの使用#

この機能はおそらく使用しないと思いますが、変更されたファイル(パスやメタデータへのアクセスなど)を完全に制御する必要がある場合は、watch()から返されるchokidarインスタンスを使用してください。

注意: 返されるchokidarインスタンスには、キューイング、遅延、非同期完了機能はありません。

オプションの依存関係#

Gulpにはfseventsというオプションの依存関係があり、これはMac固有のファイルウォッチャーです。fseventsのインストールに関する警告("npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents")が表示されても問題ありません。fseventsのインストールがスキップされた場合、フォールバックウォッチャーが使用され、gulpfileで発生するエラーはこの警告とは関係ありません。