console.log na stdout w przypadku zdarzeń gulp

87

Chcę zalogować się do stdout (środowiska konfiguracyjnego), gdy zadanie Gulp jest uruchomione lub zostało uruchomione.

Coś takiego:

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

Nie jestem pewien, na jakie wydarzenie powinienem odpowiedzieć ani gdzie znaleźć ich listę. Jakieś wskazówki? Wielkie dzięki.

Rimian
źródło

Odpowiedzi:

170

(W grudniu 2017 r. gulp-utilModuł, który zapewniał logowanie, został wycofany . Zespół Gulp zalecił programistom zastąpienie tej funkcji fancy-logmodułem. Ta odpowiedź została zaktualizowana, aby to odzwierciedlić.)

fancy-log zapewnia logowanie i został pierwotnie zbudowany przez zespół Gulp.

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

Aby dodać logowanie, dokumentacja API Gulp mówi nam, że .srczwraca:

Zwraca strumień plików winylu, które można przesłać potokiem do wtyczek.

StreamDokumentacja Node.js zawiera listę zdarzeń. Podsumowując, oto przykład:

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

Uwaga: endzdarzenie może zostać wywołane przed zakończeniem działania wtyczki (i wysłaniem wszystkich własnych danych wyjściowych), ponieważ zdarzenie jest wywoływane, gdy „wszystkie dane zostały przesłane do systemu bazowego”.

Jacob Budin
źródło
2
.on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
Frank Nocke,
12
Masz pomysł, dlaczego w ogóle potrzebne jest narzędzie? Dlaczego nie console.logdziała?
Alex McMillan,
4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })pracuje dla mnie.
Davey,
3
@AlexMcMillan Po prostu ładnie drukuje dane wyjściowe w tym samym stylu, co reszta dziennika, dzięki czemu otrzymujesz timery.
msanford,
3
Na dzień dzisiejszy (grudzień 2017 r.) gulp-utilZostał wycofany: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90
15

(UWAGA - w grudniu 2017 r. gulp-utilModuł został wycofany).

Aby oprzeć się na odpowiedzi Jacoba Budina , ostatnio spróbowałem tego i uznałem to za przydatne.

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
źródło
.on("end")i czym się .on("finish")różnią?
Frank Nocke,
3
Jak rozumiem, writable.on('finish')będzie strzelać, gdy readable.on('end')może nie. Dokładne zdarzenie może w tym przypadku nie mieć znaczenia - bardziej skupiłem się na rejestrowaniu przydatnych statystyk.
Trevedhek
Zgodnie z aktualną dokumentacją (7.5.0): „ Zdarzenia 'finish'i 'end'są odpowiednio z klas stream.Writablei stream.Readable”. @FrankNocke
msanford
gulp-utilzostał wycofany, użyj fancy-logzamiast niego
slajma