gulp olaylarında stdout için console.log


86

Bir yudum görevi çalışırken veya çalıştığında stdout'ta (yapılandırma ortamı) oturum açmak istiyorum .

Bunun gibi bir şey:

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

Hangi olaya cevap vermem gerektiğinden veya bunların bir listesini nerede bulacağımdan emin değilim. Herhangi bir işaret var mı? Çok teşekkürler.

Yanıtlar:


170

(Aralık 2017'de, gulp-utilgünlük kaydı sağlayan modül kullanımdan kaldırıldı . Gulp ekibi, geliştiricilerin bu işlevi fancy-logmodülle değiştirmelerini önerdi . Bu yanıt, bunu yansıtacak şekilde güncellendi.)

fancy-log günlük kaydı sağlar ve orijinal olarak Gulp ekibi tarafından oluşturulmuştur.

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

Günlük kaydı eklemek için Gulp'in API belgeleri bize şunu .srcdöndürür:

Eklentilere aktarılabilen bir Vinil dosya akışı döndürür.

Node.js Streambelgeleri olayların bir listesini sağlar. Bir araya getirin, işte bir örnek:

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

Not: endOlay, eklenti tamamlanmadan (ve kendi çıktısının tamamını göndermeden) çağrılabilir, çünkü olay "tüm veriler temeldeki sisteme temizlendiğinde" çağrılır.


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

12
Neden bir alete ihtiyaç duyulduğuna dair bir fikriniz var mı? Neden çalışmıyor console.log?
Alex McMillan

4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })benim için çalışıyor.
Davey

3
@AlexMcMillan Çıktıyı günlüğün geri kalanıyla aynı stilde yazdırır, böylece zamanlayıcılar elde edersiniz.
msanford

3
Bugün (Aralık 2017) itibariyle, gulp-utilkullanımdan kaldırıldı: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90

14

(LÜTFEN DİKKAT EDİN - Aralık 2017'de gulp-utilmodül kullanımdan kaldırıldı.)

Jacob Budin'in cevabına dayanmak için bunu yakın zamanda denedim ve faydalı buldum.

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")ve .on("finish")neye göre farklılık gösterir?
Frank Nocke

3
Anladığım kadarıyla, olmayabilir writable.on('finish')zaman ateş edecek readable.on('end'). Bu durumda kesin olay önemli olmayabilir - daha çok yararlı istatistikleri kaydetmeye odaklandım.
Trevedhek

Geçerli (7.5.0) belgelere göre: " 'finish've 'end'olayları , sırasıyla stream.Writableve stream.Readablesınıflarındandır." @FrankNocke
msanford

gulp-utilkullanımdan kaldırıldı, fancy-logonun yerine kullanın
slajma

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.