Альтернатива прогону глотком

Каждый раз, когда я запускаю gulp, я вижу это сообщение gulp.run() has been deprecated. Use task dependencies or gulp.watch task triggering instead.

Пример кода:

var watch = require('gulp-watch');
watch(['public/**/*.js','!public/**/*.min.js'],function(){
    gulp.run('compressjs');
    gulp.run('bs-reload');
});

Как мне избежать использования gulp.run() с gulp-watch?


person user1995781    schedule 03.03.2015    source источник


Ответы (3)


Вы не должны использовать run. Вот альтернатива (для решения этой части вашего ответа), но не то, что вам нужно сделать:

gulp
    .start('default')
    .once('task_stop', function(){
        //do other stuff.
     });

Если вам действительно нужно запустить специальную задачу, но вы можете буквально использовать run... Вы можете использовать .start с именем задачи, а также подключиться к обработчику task_stop, чтобы запустить что-то, когда задача будет завершена. Это удобно при написании тестов для gulp-задач, но это действительно так.

однако при повседневном использовании gulp это антипаттерн.

Обычно вы создаете небольшие задачи и комбинируете их. Это правильный путь. Видеть это:

var gulp = require('gulp'),
    runSequence = require('run-sequence');

function a(){
  //gulpstuff
} 
function b(){
  //gulpstuff
}

function d(callback){
  runSequence('a', 'b', callback)
}

gulp
    .task('a', a) // gulp a -runs a
    .task('b', b) // gulp b runs b
    .task('c', ['a', 'b']) //gulp c runs a and b at the same time
    .task('d', d); //gulp d runs a, then b.

в основном, если бы c или d были задачей наблюдения, вы достигли бы той же цели, запуская уже зарегистрированные задачи меньшего глотка без .run

person the_5imian    schedule 20.05.2015

gulp.run() устарел, потому что люди использовали его как костыль. Вы используете его как костыль!

Я не уверен, почему вы используете gulp-watch, встроенный gulp.watch был бы гораздо более подходящим для того, для чего вы его используете. Посмотрите документацию для .watch: https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpwatchglob--opts-tasks-or-gulpwatchglob--opts-cb

Вот что вы должны были написать. Пожалуйста, поймите, почему вы используете его, а не просто копируете:

gulp.watch(['public/**/*.js','!public/**/*.min.js'], ['compressjs', 'bs-reload'])
person callumacrae    schedule 03.03.2015
comment
Спасибо за Ваш ответ. Я понимаю, что при использовании gulp.watch это можно сделать, как ваш ответ. Но я использую gulp-watch. Причина, по которой я использую gulp-watch, заключается в том, что gulp.watch не отслеживает новые или удаленные файлы по моему опыту и находит здесь: stackoverflow.com/questions/22391527/ Итак, как я могу не использовать gulp.run для моего gulp-watch здесь? - person user1995781; 03.03.2015
comment
Хотя это ломает. Он игнорирует зависимости в первой зависимости. - person Oliver Dixon; 23.07.2016

Вы всегда можете просто использовать простые старые функции javascript. Из того, что я читал, это считается более «глотковым» способом ведения дел.

Однажды я столкнулся с подобной ситуацией и в основном решил ее примерно так:

var watch = require('gulp-watch');
watch(['public/**/*.js','!public/**/*.min.js'], function(){
    compress();
    bsReload();
});

И затем эти функции являются в основном обертками вокруг того, что было бы вашими первоначальными задачами gulp:

var compress = function () {
  return gulp.src("stuff/**")
          .pipe(gulp-compress())
          .pipe(gulp.dest("./the_end/");
};

Легко увлечься идеей, что нужно использовать задачи gulp для всего, иначе вы «делаете это неправильно», но если вам нужно использовать что-то подобное, сделайте это.

Если вам также нужна задача gulp с той же функциональностью, сделайте что-то вроде этого:

gulp.task("compress", function () {
  return compress();
});

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

person Hal    schedule 17.03.2015