23

我已经定义了一些任务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()在我拥有的每项任务中都包含任务。我只想有一项任务 - 手表,它将结合所有“手表”。

----- 编辑----(因为我可能不太明白我的意思):

我需要从任务内部运行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 插件运行良好,可让您定义运行顺序,但它自称是 hack: https ://www.npmjs.com/package/run-sequence
  • Contra 建议编写普通的旧函数并调用它们。这对我来说是一个新想法,但我认为下面的示例抓住了这个想法。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']在第一次调用 watch 时使用该部分运行任何所需的任务,或者利用这些任务来运行异步

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

您可以只调用一项任务,然后包括两项任务

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 回答