console.log allo stdout sugli eventi gulp


86

Voglio accedere a stdout (l'ambiente di configurazione) quando un'attività gulp è in esecuzione o è stata eseguita.

Qualcosa come questo:

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

Non sono sicuro a quale evento dovrei rispondere o dove trovare un elenco di questi. Qualche suggerimento? Grazie molto.

Risposte:


170

(Nel dicembre 2017, il gulp-utilmodulo, che forniva la registrazione, è stato deprecato . Il team di Gulp ha consigliato agli sviluppatori di sostituire questa funzionalità con il fancy-logmodulo. Questa risposta è stata aggiornata per riflettere questo.)

fancy-log fornisce la registrazione ed è stato originariamente costruito dal team di Gulp.

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

Per aggiungere la registrazione, la documentazione API di Gulp ci dice che .srcrestituisce:

Restituisce un flusso di file Vinyl che possono essere reindirizzati ai plugin.

La Streamdocumentazione di Node.js fornisce un elenco di eventi. Metti insieme, ecco un esempio:

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

Nota: l' endevento può essere chiamato prima che il plugin sia completo (e abbia inviato tutto il suo output), perché l'evento viene chiamato quando "tutti i dati sono stati scaricati nel sistema sottostante".


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

12
Qualche idea sul perché sia ​​necessario uno strumento? Perché non console.logfunziona?
Alex McMillan

4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })lavora per me.
Davey

3
@AlexMcMillan Stampa semplicemente l'output nello stesso stile del resto del registro in modo da ottenere timer.
msanford

3
Ad oggi (dicembre 2017), gulp-utilè stato ritirato
m90

14

(NOTA: a dicembre 2017, il gulp-utilmodulo è stato deprecato.)

Per basarmi sulla risposta di Jacob Budin , di recente ho provato questo e l'ho trovato utile.

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")e .on("finish")differiscono da cosa?
Frank Nocke

3
A quanto ho capito, writable.on('finish')sparerà quando readable.on('end')potrebbe no. L'evento esatto potrebbe non avere importanza in questo caso: ero più concentrato sulla registrazione di statistiche utili.
Trevedhek

Secondo la documentazione corrente (7.5.0): "Gli eventi 'finish'e 'end'provengono rispettivamente dalle classi stream.Writablee stream.Readable." @FrankNocke
msanford

gulp-utilè stato deprecato, usa fancy-loginvece
slajma

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.