Выполнение существующей задачи с помощью gulp -watch

У меня есть некоторые задачи, уже определенные в gulpfile.js, и я хочу использовать плагин gulp-watch (для запуска задач в новых файлах). Мой вопрос в том, что я ничего не мог найти, могу ли я запустить свои существующие задачи во время работы функции watch (from plugin)?

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

Ответы

Ответ 1

Я также столкнулся с проблемой использования gulp -watch (не gulp.watch), которому нужно использовать форму обратного вызова, и возникли проблемы с поиском подходящего способа запуска задачи в обратном вызове.

Моим вариантом было то, что я хотел посмотреть все файлы стилусов, но обрабатывать только основной файл стилуса, который включает в себя все остальные. Более новые версии gulp -watch могут адресовать это, но у меня проблемы с 4.3.x, поэтому я застрял в 4.2.5.

  • gulp.run устарел, поэтому я не хочу его использовать.
  • gulp.start хорошо работает, но также советует gulp author, contra.
  • Плагин последовательности выполнения работает хорошо и позволяет определить прогон порядок, но это самопровозглашенный взлом: 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.

Ответ 2

Скорее всего, вы захотите запустить определенные задачи, связанные с файлами, которые вы просматриваете -

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

Вы также можете использовать часть ['lint'] для запуска любых требуемых задач при первом вызове вызова или использовать задачи для запуска async с помощью

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

Ответ 3

Вы можете просто вызвать одну задачу, которая включает в себя обе задачи

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

поэтому здесь вы просто назовете 'gulp'

Ответ 4

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

работает нормально, кроме предупреждения