console.log到gulp事件上的stdout


86

我想在gulp任务正在运行或已运行时登录到stdout(配置环境)。

像这样:

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

我不确定应该响应哪个事件或在哪里可以找到这些事件的列表。有指针吗?非常感谢。

Answers:


169

(在2017年12月,不推荐使用gulp-util提供日志记录的模块。Gulp团队建议开发人员用该模块替换此功能。此答案已更新以反映这一点。)fancy-log

fancy-log 提供日志记录,最初由Gulp团队构建。

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

要添加日志记录,Gulp的API文档告诉我们.src返回:

返回可以通过管道传输到插件的Vinyl文件流。

Node.js的Stream文档提供了事件列表。放在一起,这是一个示例:

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

注意:end可以在插件完成(并已发送所有其自己的输出)之前调用该事件,因为在“所有数据均已刷新到底层系统”时调用该事件。


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

12
知道为什么根本需要工具吗?为什么不起作用console.log
亚历克斯·麦克米伦

4
@AlexMcMillan.on('end', function(){ console.log('Almost there...'); })为我工作。
戴维

3
@AlexMcMillan它只是以与其余日志相同的样式打印输出,因此您可以获得计时器。
msanford '17

3
截至今天(2017年12月),gulp-util已被弃用:medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90

15

(请注意-在2017年12月,该gulp-util模块已弃用。)

为了更好地利用Jacob Budin的答案,我最近尝试了一下,发现它很有用。

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")有什么不同?
Frank Nocke

3
据我了解,writable.on('finish')有时readable.on('end')可能会触发。在这种情况下,确切的事件可能无关紧要-我更专注于记录有用的统计信息。
Trevedhek '16

根据当前(7.5.0)文档:'finish''end'事件分别来自stream.Writablestream.Readable类。” @FrankNocke
msanford

gulp-util已被弃用,请fancy-log改用
slajma

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.