2015-01-15 16 views
63

Voglio accedere a stdout (l'ambiente config) quando un'attività gulp è in esecuzione o ha terminato.console.log a stdout su eventi gulp

Qualcosa di simile a 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 quale evento dovrei rispondendo o dove trovare un elenco di questi. Qualche indicazione? Grazie molto.

risposta

127

(Nel mese di dicembre 2017, il modulo gulp-util, che prevedeva la registrazione, was deprecated. Il team Gulp raccomandato che gli sviluppatori di sostituire questa funzionalità con il modulo fancy-log. Questa risposta è stata aggiornata per riflettere tale.)

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

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

Per aggiungere la registrazione, Gulp's API documentation ci dicono che .src rendimenti:

restituisce un flusso di file in vinile che possono essere immesse plugin.

La documentazione di Node.js Stream fornisce un elenco di eventi. Mettere 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'evento end può essere chiamato prima che il plugin è completa (e ha mandato tutto suo output), perché l'evento viene chiamato quando "tutti i dati sono stati trasferiti al sistema sottostante ".

+1

'.on ('fine',() => gutil.log ('sintassi ES6 freccia per semplicità ...'))' –

+4

Qualsiasi idea del perché è necessario uno strumento a tutti? Perché 'console.log' non funziona? –

+1

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

9

costruire sulla risposta da 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); 
    }); 
} 
+0

' .on ("fine") 'e' .On ("finish ")' differiscono da cosa? –

+2

A quanto ho capito, 'writable.on ('finish')' si attiva quando 'readable.on ('end')' non lo è. In questo caso, l'evento esatto potrebbe non avere importanza: ero più concentrato sulla registrazione di statistiche utili. –

+0

[Secondo la documentazione corrente (7.5.0):] (https://nodejs.org/api/stream.html#stream_events_finish_and_end) "Gli eventi' 'finish'' e '' end'' provengono dal' stream .Writable' e 'stream.Readable' classes, rispettivamente." @FrankNocke – msanford