一般に、gulp タスクからソース ファイルをオーバーライドするのはお勧めできません。これらのファイルが開いているエディタ/IDE は、それを適切に処理する場合としない場合があります。一般的には、ファイルを別のdist
フォルダーに書き込むことをお勧めします。
ここで考えられる解決策は2つあります。
解決策 1
プラグインの 2 回目の実行とファイルの再書き込みを停止してgulp-jscs
、実行中の無限ループを防ぐ必要があります。これを達成するには、タスクに追加するだけgulp-cached
ですlint
。
var cache = require('gulp-cached');
gulp.task('lint', function() {
return gulp.src('/src/**/*.js')
.pipe(cache('lint'))
.pipe(jscs({
fix: true
}))
.pipe(cache('lint'))
.pipe(jscs.reporter())
.pipe(gulp.dest('/src'));
});
1 つ目cache()
は、最後の呼び出し以降に変更されたディスク上のファイルのみlint
が渡されるようにします。2 つ目cache()
は、実際に修正されたファイルのみがjscs()
最初にディスクに書き込まれるようにします。
このソリューションの欠点は、lint
タスクがまだ 2 回実行されていることです。2 回目の実行では、ファイルは実際には lint されていないため、これは大した問題ではありません。gulp-cache
それを防ぎます。しかし、絶対に一度だけ実行したい場合は、lint
別の方法があります。
解決策 2
まず、ビルトインの代わりにgulp-watch
プラグインgulp.watch()
を使用する必要があります(これは、 の代わりに優れたchokidar
ライブラリを使用するためですgaze
)。
次に、簡単なpausableWatch()
関数を自分で作成し、それをwatch
タスクで使用できます。
var watch = require('gulp-watch');
function pausableWatch(watchedFiles, tasks) {
var watcher = watch(watchedFiles, function() {
watcher.close();
gulp.start(tasks, function() {
pausableWatch(watchedFiles, tasks);
});
});
}
gulp.task('watch', function() {
pausableWatch('/src/**/*.js', ['lint']);
});
上記では、タスクが開始watcher
される前に停止されます。lint
したがって 、タスク.js
中に書き込まれたファイルは、 . タスクが終了すると、が再び起動します。lint
watcher
lint
watcher
このソリューションの欠点は.js
、タスクの実行中にファイルを保存するlint
と、その変更が によって取得されないことですwatcher
(タスクが停止しているため)。タスクが終了した後 (が再び開始されたとき)に、.js
ファイルを保存する必要があります。lint
watcher