console.log a stdout en eventos gulp


87

Quiero iniciar sesión en stdout (el entorno de configuración) cuando una tarea de gulp se está ejecutando o se ha ejecutado.

Algo como esto:

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

No estoy seguro de a qué evento debería responder ni dónde encontrar una lista de estos. ¿Algún consejo? Muchas gracias.

Respuestas:


170

(En diciembre de 2017, el gulp-utilmódulo, que proporcionaba registro, quedó obsoleto . El equipo de Gulp recomendó que los desarrolladores reemplazaran esta funcionalidad con el fancy-logmódulo. Esta respuesta se actualizó para reflejar eso).

fancy-log proporciona registro y fue construido originalmente por el equipo de Gulp.

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

Para agregar el registro, la documentación de la API de Gulp nos dice que .srcdevuelve:

Devuelve un flujo de archivos de vinilo que se pueden canalizar a complementos.

La Streamdocumentación de Node.js proporciona una lista de eventos. Juntos, aquí hay un ejemplo:

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: El endevento se puede llamar antes de que el complemento esté completo (y haya enviado toda su propia salida), porque el evento se invoca cuando "todos los datos se han vaciado al sistema subyacente".


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

12
¿Alguna idea de por qué se necesita una herramienta? ¿Por qué no console.logfunciona?
Alex McMillan

4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })funciona para mí.
Davey

3
@AlexMcMillan Simplemente imprime la salida con el mismo estilo que el resto del registro para obtener temporizadores.
msanford

3
A partir de hoy (diciembre de 2017), gulp-utilha quedado obsoleto: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90

15

(TENGA EN CUENTA: en diciembre de 2017, el gulp-utilmódulo quedó obsoleto).

Para aprovechar la respuesta de Jacob Budin , recientemente probé esto y lo encontré útil.

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")y .on("finish")diferir en que?
Frank Nocke

3
Según tengo entendido, writable.on('finish')se disparará cuando readable.on('end')no. El evento exacto puede no importar en este caso; estaba más enfocado en registrar estadísticas útiles.
Trevedhek

Según la documentación actual (7.5.0): "Los eventos 'finish'y 'end'son de las clases stream.Writabley stream.Readable, respectivamente". @FrankNocke
msanford

gulp-utilha sido obsoleto, use fancy-logen su lugar
slajma

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.