すでにいくつかのタスクが定義されておりgulpfile.js
、プラグイン (新しいファイルでタスクを実行するため) を使用したいと考えていますgulp-watch
。私の質問は、何も見つからなかったので、watch (プラグインから) 関数を実行しながら既存のタスクを実行できるかどうかです。
var gulp = require('gulp'),
watch = require('gulp-watch'),
...;
gulp.task('lint', function () {
return gulp.src(path.scripts)
.pipe(jshint())
.pipe(jshint.reporter(stylish));
});
gulp.task('watch', function () {
watch({ glob: 'app/**/*.js' }); // Run 'lint' task for those files
});
なぜなら、すべてのタスクに task を含めたくないからですwatch()
。すべての「ウォッチ」を結合する 1 つのタスク (watch) のみを作成したいと思います。
----- 編集 ---- (おそらく私の言いたいことがよく伝わらなかったため):
タスク内からタスクを実行する必要がありますgulp('watch')
。例:
私がやったようにgulp.watch
:
gulp.task('watch', function () {
gulp.watch('files', ['task1', 'task2']);
});
同じことをプラグインを使って行う必要がありますgulp-watch
(動作しないことはわかっています)。
var watch = require('gulp-watch');
gulp.task('watch', function () {
watch({ glob: 'files' }, ['task1', 'task2']);
});
ベストアンサー1
また、gulp-watch (gulp.watch ではない) を使用したい、コールバック形式を使用する必要がある、コールバックでタスクを実行する適切な方法を見つけるのに苦労するという問題にも遭遇しました。
私の使用例では、すべてのスタイラス ファイルを監視したいが、他のすべてのファイルを含むメインのスタイラス ファイルのみを処理したいと考えていました。gulp-watch の新しいバージョンではこの問題に対処できるかもしれませんが、4.3.x で問題が発生しているため、4.2.5 で止まっています。
- gulp.run は非推奨なので、使用したくありません。
- gulp.start はうまく機能しますが、gulp の作成者である contra からも推奨されていません。
- run-sequence プラグインはうまく機能し、実行順序を定義できますが、自称ハックです。https://www.npmjs.com/package/run-sequence
- 反対に、単純な古い関数を書いて、それを呼び出すことをお勧めします。これは私にとっては新しいアイデアですが、以下の例がそのアイデアを捉えていると思います。https://github.com/gulpjs/gulp/issues/505
好きなのを選びな。
var gulp = require('gulp'),
watch = require('gulp-watch'), // not gulp.watch
runSequence = require('run-sequence');
// plain old js function
var runStylus = function() {
return gulp.src('index.styl')
.pipe(...) // process single file
}
gulp.task('stylus', runStylus);
gulp.task('watch', function() {
// watch many files
watch('*.styl', function() {
runSequence('stylus');
OR
gulp.start('stylus');
OR
runStylus();
});
});
これらはすべて警告なしで動作していますが、gulp-watch の 4.2.x バージョンから「完了」コールバックを取得できるかどうかはまだわかりません。