console.log ke stdout pada acara gulp

86

Saya ingin masuk ke stdout (lingkungan config) ketika tugas gulp sedang berjalan atau telah dijalankan.

Sesuatu seperti ini:

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

Saya tidak yakin acara apa yang harus saya tanggapi atau di mana saya dapat menemukan daftarnya. Ada petunjuk? Terimakasih banyak.

Rimian
sumber

Jawaban:

170

(Pada bulan Desember 2017, gulp-utilmodul, yang menyediakan logging, sudah tidak digunakan lagi . Tim Gulp merekomendasikan agar pengembang mengganti fungsi ini dengan fancy-logmodul. Jawaban ini telah diperbarui untuk mencerminkan hal itu.)

fancy-log menyediakan logging dan awalnya dibangun oleh tim Gulp.

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

Untuk menambahkan logging, dokumentasi API Gulp memberi tahu kami bahwa .srcmengembalikan:

Mengembalikan aliran file Vinyl yang dapat disalurkan ke plugin.

StreamDokumentasi Node.js menyediakan daftar kejadian. Jika digabungkan, inilah contohnya:

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

Catatan: endAcara mungkin dipanggil sebelum plugin selesai (dan telah mengirim semua outputnya sendiri), karena acara dipanggil ketika "semua data telah dialihkan ke sistem yang mendasarinya".

Jacob Budin
sumber
2
.on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
Frank Nocke
12
Tahu mengapa alat dibutuhkan sama sekali? Mengapa tidak console.logberhasil?
Alex McMillan
4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })bekerja untuk saya.
Davey
3
@AlexMcMillan Ini hanya mencetak output dengan gaya yang sama seperti log lainnya sehingga Anda mendapatkan pengatur waktu.
msanford
3
Mulai hari ini (Desember 2017), gulp-utiltidak lagi digunakan: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90
14

(HARAP DICATAT - Pada Desember 2017, gulp-utilmodul ini tidak digunakan lagi.)

Untuk membangun jawaban dari Jacob Budin , saya baru-baru ini mencoba ini dan merasa berguna.

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
sumber
.on("end")dan .on("finish")berbeda dengan apa?
Frank Nocke
3
Seperti yang saya pahami, writable.on('finish')akan menyala jika readable.on('end')tidak. Peristiwa tepatnya mungkin tidak masalah dalam kasus ini - saya lebih fokus pada pencatatan statistik yang berguna.
Trevedhek
Sesuai dengan dokumentasi saat ini (7.5.0): "The 'finish'and 'end'events masing-masing dari kelas stream.Writabledan stream.Readable." @FrankE
msanford
gulp-utiltelah ditinggalkan, gunakan fancy-logsebagai gantinya
slajma