console.log vers stdout sur les événements gulp

87

Je veux me connecter à stdout (l'environnement de configuration) lorsqu'une tâche gulp est en cours d'exécution ou a été exécutée.

Quelque chose comme ça:

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

Je ne sais pas à quel événement je devrais répondre ni où en trouver une liste. Des pointeurs? Merci beaucoup.

Rimian
la source

Réponses:

170

(En décembre 2017, le gulp-utilmodule, qui fournissait la journalisation, était obsolète . L'équipe Gulp a recommandé aux développeurs de remplacer cette fonctionnalité par le fancy-logmodule. Cette réponse a été mise à jour pour refléter cela.)

fancy-log fournit la journalisation et a été initialement construit par l'équipe Gulp.

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

Pour ajouter la journalisation, la documentation de l'API de Gulp nous indique que .srcrenvoie:

Renvoie un flux de fichiers Vinyl qui peuvent être redirigés vers des plugins.

La Streamdocumentation de Node.js fournit une liste d'événements. Ensemble, voici un exemple:

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

Remarque: l' endévénement peut être appelé avant que le plug-in ne soit terminé (et ait envoyé toute sa propre sortie), car l'événement est appelé lorsque "toutes les données ont été vidées vers le système sous-jacent".

Jacob Budin
la source
2
.on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
Frank Nocke
12
Une idée de la raison pour laquelle un outil est nécessaire? Pourquoi ça ne console.logmarche pas ?
Alex McMillan
4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })travaille pour moi.
Davey
3
@AlexMcMillan Il imprime simplement la sortie dans le même style que le reste du journal afin que vous obteniez des minuteries.
msanford
3
À partir d'aujourd'hui (décembre 2017), gulp-utilest obsolète: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90
15

(VEUILLEZ NOTER - En décembre 2017, le gulp-utilmodule est devenu obsolète.)

Pour construire sur la réponse de Jacob Budin , j'ai récemment essayé ceci et l'ai trouvé 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);
    });
}
Trevedhek
la source
.on("end")et .on("finish")différer par quoi?
Frank Nocke
3
Si je comprends bien, writable.on('finish')se déclenchera quand readable.on('end')peut - être pas. L'événement exact n'a peut-être pas d'importance dans ce cas - j'étais plus concentré sur la journalisation des statistiques utiles.
Trevedhek
Selon la documentation actuelle (7.5.0): "Les événements 'finish'et 'end'proviennent des classes stream.Writableet stream.Readable, respectivement." @FrankNocke
msanford
gulp-utilest obsolète, utilisez à la fancy-logplace
slajma