console.log в стандартный вывод событий gulp

87

Я хочу войти в стандартный вывод (конфигурационная среда), когда задача gulp выполняется или выполняется.

Что-то вроде этого:

gulp.task('scripts', function () {
  var enviroment = argv.env || 'development';
  var config = gulp.src('config/' + enviroment + '.json')
      .pipe(ngConstant({name: 'app.config'}));
  var scripts = gulp.src('js/*');

  return es.merge(config, scripts)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('app/dist'))
    .on('success', function() { 
      console.log('Configured environment: ' + environment);
    });
});

Я не уверен, на какое событие мне следует отвечать или где найти их список. Есть указатели? Большое спасибо.

Римиан
источник

Ответы:

170

(В декабре 2017 года gulp-utilмодуль, обеспечивающий ведение журнала, устарел . Команда Gulp рекомендовала разработчикам заменить эту функциональность fancy-logмодулем. Этот ответ был обновлен, чтобы отразить это.)

fancy-log обеспечивает ведение журнала и изначально был создан командой Gulp.

var log = require('fancy-log');
log('Hello world!');

Чтобы добавить ведение журнала, документация Gulp API сообщает нам, что .srcвозвращает:

Возвращает поток файлов Vinyl, который может быть передан плагинам.

StreamДокументация Node.js содержит список событий. Вот пример:

gulp.task('default', function() {
    return gulp.src('main.scss')
        .pipe(sass({ style: 'expanded' }))
        .on('end', function(){ log('Almost there...'); })
        .pipe(minifycss())
        .pipe(gulp.dest('.'))
        .on('end', function(){ log('Done!'); });
});

Примечание. endСобытие может быть вызвано до того, как плагин завершит работу (и отправит все свои выходные данные), потому что событие вызывается, когда «все данные были сброшены в базовую систему».

Яков Будин
источник
2
.on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
Фрэнк Нок
12
Есть идеи, зачем вообще нужен инструмент? Почему не console.logработает?
Alex McMillan
4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })у меня работает.
Davey
3
@AlexMcMillan Он просто красиво печатает вывод в том же стиле, что и остальная часть журнала, так что вы получаете таймеры.
msanford
3
На сегодняшний день (декабрь 2017), gulp-utilустарел: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90
15

(ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: в декабре 2017 года gulp-utilмодуль устарел.)

Чтобы развить ответ Якоба Будина , я недавно попробовал это и нашел его полезным.

var gulp = require("gulp");
var util = require("gulp-util");
var changed = require("gulp-changed");

gulp.task("copyIfChanged", function() {
    var nSrc=0, nDes=0, dest="build/js";
    gulp.src("app/**/*.js")
    .on("data", function() { nSrc+=1;})
    .pipe(changed(dest)) //filter out src files not newer than dest
    .pipe(gulp.dest(dest))
    .on("data", function() { nDes+=1;})
    .on("finish", function() {
        util.log("Results for app/**/*.js");
        util.log("# src files: ", nSrc);
        util.log("# dest files:", nDes);
    });
}
Trevedhek
источник
.on("end")и чем .on("finish")отличаются?
Фрэнк Нок
3
Насколько я понимаю, writable.on('finish')будет стрелять, когда readable.on('end')нельзя. В этом случае точное событие может не иметь значения - я был больше сосредоточен на регистрации полезной статистики.
Trevedhek 06
В соответствии с текущей (7.5.0) документации: « 'finish'и 'end'события из stream.Writableи stream.Readableклассов, соответственно.» @FrankNocke
msanford
gulp-utilустарел, используйте fancy-logвместо этого
slajma