【问题标题】:console.log to stdout on gulp eventsconsole.log 到标准输出的 gulp 事件
【发布时间】:2015-03-14 12:52:46
【问题描述】:

gulp 任务正在运行或已经运行时,我想记录到标准输出(配置环境)。

类似这样的:

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

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

【问题讨论】:

    标签: javascript node.js gulp


    【解决方案1】:

    (请注意 - 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);
        });
    }
    

    更新(2021 年 4 月): 重新弃用模块问题。 尝试用来自require('fancy-log')log 替换来自require('gulp-util')util.log。该方法的其余部分应该仍然有效。免责声明:我尚未对此进行测试。

    【讨论】:

    • .on("end").on("finish") 有何不同?
    • 据我了解,writable.on('finish') 会触发,而readable.on('end') 可能不会触发。在这种情况下,确切的事件可能并不重要——我更专注于记录有用的统计数据。
    • As per the current (7.5.0) documentation: "'finish''end' 事件分别来自 stream.Writablestream.Readable 类。" @FrankNocke
    • gulp-util 已被弃用,请改用fancy-log
    【解决方案2】:

    遗憾的是,gulp.util 已被弃用。 请改用fancy-loghttps://www.npmjs.com/package/fancy-log.

    【讨论】:

      【解决方案3】:

      (在 2017 年 12 月,gulp-util 模块提供了日志记录,was deprecated。Gulp 团队建议开发人员将此功能替换为 fancy-log 模块。此答案已更新以反映这一点。 )

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

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

      要添加日志记录,Gulp's API documentation 告诉我们.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 事件可能会在插件完成之前被调用(并且已经发送了它自己的所有输出),因为当“所有数据都已刷新到底层系统”时会调用该事件。

      【讨论】:

      • .on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
      • 知道为什么需要一个工具吗?为什么console.log 不起作用?
      • @AlexMcMillan .on('end', function(){ console.log('Almost there...'); }) 为我工作。
      • @AlexMcMillan 它只是以与日志其余部分相同的样式漂亮地打印输出,以便您获得计时器。
      • 截至今天(2017 年 12 月),gulp-util 已被弃用:medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
      猜你喜欢
      • 2018-03-10
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2013-05-01
      • 2018-08-21
      • 1970-01-01
      相关资源
      最近更新 更多