web-dev-qa-db-ja.com

gulp-watchを使用して既存のタスクを実行する

_gulpfile.js_で既に定義されているいくつかのタスクがあり、_gulp-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
});
_

持っているすべてのタスクにwatch()タスクを含めたくないからです。タスクを1つだけにしたい-ウォッチ、これはすべての「ウォッチ」を結合します。

-----編集----(私はおそらく自分の主張を十分に理解できなかったので):

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']);
});
_
21
Tomasz Kasperek

また、gulp-watch(gulp.watchではなく)を使用したいという問題、コールバックフォームを使用する必要があり、コールバックでタスクを実行する適切な方法を見つけるのに苦労しています。

私のユースケースは、すべてのスタイラスファイルを監視したいが、他のすべてを含むメインのスタイラスファイルのみを処理することでした。 gulp-watchの新しいバージョンはこれに対処するかもしれませんが、4.3.xで問題が発生しているため、4.2.5に固執しています。

  • gulp.runは非推奨であるため、使用したくありません。
  • gulp.startはうまく機能しますが、gulp作成者からも反対されています。
  • 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();
    });
});

これらはすべて警告なしで機能していますが、4.2.xバージョンのgulp-watchから「完了」コールバックを取得することについてはまだ確信が持てません。

24
AgentOrange

ほとんどの場合、監視しているファイルに関連する特定のタスクを実行する必要があります-

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

['lint']部分を使用して、ウォッチが最初に呼び出されたときに必要なタスクを実行したり、タスクを利用して非同期で実行したりすることもできます。

gulp.task('default', ['lint','watch'])
13
Kelly J Andrews

1つのタスクを呼び出すだけで、両方のタスクを含めることができます

gulp.task('default', ['lint','watch'])

ここでは、「gulp」と呼ぶだけです

7
Andrew C
gulp.task('watch', function() {
  watch(files, function() {
    gulp.run(['task1', 'task2']);
  });
});

警告を除いて、正常に動作します

4
gongqj