Запуск существующей задачи с помощью 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']);
});

person Tomasz Kasperek    schedule 14.01.2015    source источник


Ответы (4)


Я также столкнулся с проблемой желания использовать 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
  • 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();
    });
});

Все это работает для меня без предупреждений, но я все еще не уверен в получении обратного вызова «готово» из версии gulp-watch 4.2.x.

person AgentOrange    schedule 28.07.2015
comment
Вау, в последнее время я просматривал gulp, чтобы быть в курсе того, как его используют некоторые коллеги; ваш ответ, хотя и не принятый для этого вопроса, ответил примерно на 4 других вопроса, которые у меня были относительно watch, run и run-sequence, и в некоторой степени об использовании ванильных функций. Так что спасибо, что сэкономили мне кучу времени :D - person danjah; 15.06.2016

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

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

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

gulp.task('default', ['lint','watch'])
person Kelly J Andrews    schedule 14.01.2015
comment
Можете ли вы расширить это, чтобы вызывать определенные задачи из gulp.watch на основе типа события. - person Mudlabs; 28.06.2017

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

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

так что здесь вы бы просто назвали «глоток»

person Andrew C    schedule 14.01.2015

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

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

person gongqj    schedule 04.05.2015