console.log to stdout bei Schluckereignissen


86

Ich möchte mich bei stdout (der Konfigurationsumgebung) anmelden, wenn eine gulp- Task ausgeführt wird oder ausgeführt wurde.

Etwas wie das:

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

Ich bin mir nicht sicher, auf welches Ereignis ich reagieren soll oder wo ich eine Liste davon finden kann. Irgendwelche Hinweise? Danke vielmals.

Antworten:


168

(Im Dezember 2017 war das gulp-utilModul, das die Protokollierung bereitstellte, veraltet . Das Gulp-Team empfahl den Entwicklern, diese Funktionalität durch das fancy-logModul zu ersetzen . Diese Antwort wurde aktualisiert, um dies widerzuspiegeln.)

fancy-log bietet Protokollierung und wurde ursprünglich vom Gulp-Team erstellt.

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

So fügen Sie die Protokollierung, Gulp API Dokumentation sagen uns , dass .srcRenditen:

Gibt einen Stream von Vinyl-Dateien zurück, die an Plugins weitergeleitet werden können.

Die StreamDokumentation von Node.js enthält eine Liste der Ereignisse. Zusammen hier ein Beispiel:

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

Hinweis: Das endEreignis kann aufgerufen werden, bevor das Plugin vollständig ist (und alle seine eigenen Ausgaben gesendet hat), da das Ereignis aufgerufen wird, wenn "alle Daten auf das zugrunde liegende System übertragen wurden".


2
.on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
Frank Nocke

12
Irgendeine Idee, warum überhaupt ein Werkzeug benötigt wird? Warum funktioniert das nicht console.log?
Alex McMillan

4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })arbeitet für mich.
Davey

2
@AlexMcMillan Die Ausgabe wird nur im gleichen Stil wie der Rest des Protokolls gedruckt, sodass Sie Timer erhalten.
Msanford

3
Ab heute (Dezember 2017) gulp-utilist veraltet: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90

15

(BITTE BEACHTEN SIE - Im Dezember 2017 war das gulp-utilModul veraltet.)

Um auf der Antwort von Jacob Budin aufzubauen , habe ich dies kürzlich versucht und fand es nützlich.

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

.on("end")und .on("finish")unterscheiden sich durch was?
Frank Nocke

3
Wie ich es verstehe, writable.on('finish')wird feuern, wenn readable.on('end')nicht. Das genaue Ereignis spielt in diesem Fall möglicherweise keine Rolle - ich habe mich mehr darauf konzentriert, nützliche Statistiken zu protokollieren.
Trevedhek

Gemäß der aktuellen (7.5.0) Dokumentation: „Die 'finish'und 'end'Ereignisse sind aus den stream.Writableund stream.ReadableKlassen sind.“ @FrankNocke
Msanford

gulp-utilwurde veraltet, verwenden Sie fancy-logstattdessen
slajma

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.