23

いくつかのタスクが既に定義されており、プラグイン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
});

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']);
});
4

4 に答える 4

24

また、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();
    });
});

これらはすべて警告なしで機能していますが、4.2.x バージョンの gulp-watch から「完了」コールバックを受け取るかどうかはまだわかりません。

于 2015-07-28T16:48:20.897 に答える
13

監視しているファイルに関連する特定のタスクを実行したいと思うでしょう -

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

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

gulp.task('default', ['lint','watch'])
于 2015-01-14T21:07:51.483 に答える
7

1つのタスクを呼び出すだけで、両方のタスクが含まれます

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

したがって、ここでは「gulp」と呼ぶだけです

于 2015-01-14T21:02:24.290 に答える
4
gulp.task('watch', function() {
  watch(files, function() {
    gulp.run(['task1', 'task2']);
  });
});

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

于 2015-05-04T07:02:12.663 に答える