console.log để stdout về các sự kiện gulp


87

Tôi muốn đăng nhập vào stdout (môi trường cấu hình) khi tác vụ gulp đang chạy hoặc đã chạy.

Một cái gì đó như thế này:

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

Tôi không chắc mình nên phản hồi sự kiện nào hoặc tìm danh sách những sự kiện này ở đâu. Bất kỳ gợi ý? Cảm ơn nhiều.

Câu trả lời:


170

(Vào tháng 12 năm 2017, gulp-utilmô-đun cung cấp tính năng ghi nhật ký, không được dùng nữa . Nhóm Gulp đã khuyến nghị các nhà phát triển thay thế chức năng này bằng fancy-logmô-đun. Câu trả lời này đã được cập nhật để phản ánh điều đó.)

fancy-log cung cấp ghi nhật ký và ban đầu được xây dựng bởi nhóm Gulp.

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

Để thêm ghi nhật ký, tài liệu API của Gulp cho chúng tôi biết rằng .srctrả về:

Trả về một luồng tệp Vinyl có thể được chuyển đến các plugin.

StreamTài liệu của Node.js cung cấp một danh sách các sự kiện. Tổng hợp lại, đây là một ví dụ:

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

Lưu ý: Sự endkiện có thể được gọi trước khi plugin hoàn tất (và đã gửi tất cả đầu ra của chính nó), vì sự kiện được gọi khi "tất cả dữ liệu đã được chuyển đến hệ thống cơ bản".


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

12
Bất kỳ ý tưởng tại sao một công cụ là cần thiết? Tại sao không console.loghoạt động?
Alex McMillan

4
@AlexMcMillan phù .on('end', function(){ console.log('Almost there...'); })hợp với tôi.
Davey

3
@AlexMcMillan Nó chỉ in khá đẹp đầu ra theo cùng một phong cách với phần còn lại của nhật ký để bạn có bộ hẹn giờ.
msanford

3
Tính đến hôm nay (tháng 12 năm 2017), gulp-utilđã được chấp nhận: medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
M90

15

(XIN LƯU Ý - Vào tháng 12 năm 2017, gulp-utilmô-đun không được dùng nữa.)

Để xây dựng câu trả lời của Jacob Budin , gần đây tôi đã thử điều này và thấy nó hữu ích.

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").on("finish")khác nhau ở điểm nào?
Frank Nocke

3
Theo tôi hiểu, writable.on('finish')sẽ khai hỏa khi readable.on('end')có thể không. Sự kiện chính xác có thể không quan trọng trong trường hợp này - tôi tập trung hơn vào việc ghi lại các số liệu thống kê hữu ích.
Trevedhek

Theo tài liệu hiện tại (7.5.0): "Các 'finish''end'sự kiện lần lượt là từ các lớp stream.Writablestream.Readable". @FrankNocke
msanford

gulp-utilđã không được dùng nữa, hãy sử dụng fancy-logthay thế
slavejma

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.