Определение глобального поведения в Gulp (измерение длительности задачи)

Я работаю над переводом нас с ant на gulp, и в рамках этих усилий я хочу записать статистику времени в Graphite. Мы делаем это и в ant (не знаю как, в любом случае не по делу). Мой вопрос в том, что я бы предпочел не добавлять тот или иной плагин вручную к каждой имеющейся у нас задаче (у нас их более 60), а иметь какое-то глобальное поведение, при котором для каждой задачи перед ее запуском таймер запускается, и когда он сигнализирует о завершении, мы отправляем некоторые данные в Graphite (через statsd).

Может ли кто-нибудь указать мне в правильном направлении, где зацепиться за это? В документации / рецептах ничего особо полезного не нашел ...

Мы бежим gulp@4.


person Steven    schedule 04.05.2017    source источник
comment
Почему бы не перезаписать gulp.task собственной логикой?   -  person elad.chen    schedule 09.05.2017
comment
gulp полагается на orchestrator модуль, который предоставляет внутренние события. Таким образом, вы можете делать gulp.on("task_stop", ...) и прослушивать каждое событие завершения задачи. Я не думаю, что это хорошая практика, но технически выполнимая.   -  person MarcoL    schedule 09.05.2017
comment
@ elad.chen, потому что есть несколько способов сигнализировать о завершении в gulp (поток завершен, обещание выполнено, обратный вызов), если я вижу это правильно, мне придется учитывать все это поведение.   -  person Steven    schedule 09.05.2017
comment
Мой ответ помог @ Стивену? Как вы решили эту проблему?   -  person Ben Smith    schedule 17.07.2017


Ответы (1)


Вместо добавления кода времени к вашим многочисленным задачам вы можете использовать NPM gulp-duration пакет.

Фрагмент примера его использования показан ниже:

function rebundle() {
 var uglifyTimer = duration('uglify time')
 var bundleTimer = duration('bundle time')

 return bundler.bundle()
   .pipe(source('bundle.js'))
   .pipe(bundleTimer)
   // start just before uglify recieves its first file 
   .once('data', uglifyTimer.start)
   .pipe(uglify())
   .pipe(uglifyTimer)
   .pipe(gulp.dest('example/'))
}

Функция duration в gulp-duration:

Создает новый сквозной поток продолжительности. Когда этот поток закрыт, он будет записывать время, прошедшее с момента его создания, на ваш терминал.

затем позволит вам регистрировать продолжительность задачи.

Хотя это не глобальное решение для поведения, по крайней мере, вы можете указать код времени в своем файле gulp, вместо того, чтобы изменять все 60+ ваших задач.

person Ben Smith    schedule 15.05.2017