如何在gulp中获取任务内的任务名称

时间:2014-11-27 01:56:18

标签: javascript gulp

我正在使用gulp-plumber + gulp-notify,并希望将任务名称作为标题放入gulp-notify中。 以下是我写的代码,提前谢谢。

gulp.task('SOMETASK', function() {
    return gulp.src(sourcePaths)
        .pipe(plumber({errorHandler: notify.onError({
            message: "<%= error.message %>",
            title: "I WANT TO PUT TASK NAME HERE"
        })}))
        // omitted below

});

5 个答案:

答案 0 :(得分:18)

gulp.Gulp.prototype.__runTask = gulp.Gulp.prototype._runTask;
gulp.Gulp.prototype._runTask = function(task) {
  this.currentTask = task;
  this.__runTask(task);
}

gulp.task("someTask", function(){
  console.log( this.currentTask.name );
}

答案 1 :(得分:10)

gulp.task('SOMETASK',function() {
    console.log('Task name:', this.seq.slice(-1)[0]) // Task name: SOMETASK
})

答案 2 :(得分:1)

如果您想修补Gulp,以下内容适用于Gulp版本3.9.0

var _gulpStart = gulp.Gulp.prototype.start;

var _runTask = gulp.Gulp.prototype._runTask;

gulp.Gulp.prototype.start = function (taskName) {
    this.currentStartTaskName = taskName;

    _gulpStart.apply(this, arguments);
};

gulp.Gulp.prototype._runTask = function (task) {
    this.currentRunTaskName = task.name;

    _runTask.apply(this, arguments);
};

gulp.task('jscs', function () {
    console.log('this.currentStartTaskName: ' + this.currentStartTaskName);
    console.log('this.currentRunTaskName: ' + this.currentRunTaskName);
});

gulp.task('jshint', function () {
    console.log('this.currentStartTaskName: ' + this.currentStartTaskName);
    console.log('this.currentRunTaskName: ' + this.currentRunTaskName);
});

gulp.task('build', ['jshint', 'jscs']);

运行gulp build将产生以下控制台输出:

  

c:\ project&gt; gulp build
  [16:38:54]使用gulpfile c:\ project \ gulpfile.js
  [16:38:54]开始'jshint'...
  this.currentStartTaskName:build
  this.currentRunTaskName:jshint
  [16:38:54]在244微秒后完成'jshint'   [16:38:54]开始'jscs'...
  this.currentStartTaskName:build
  this.currentRunTaskName:jscs
  [16:38:54]在152μs后完成'jscs'   [16:38:54]开始'建立'......   [16:38:54]3.54μs后完成“构建”

答案 3 :(得分:0)

let aCallerName = (new Error().stack.match(/ at [^(]+ /g)).map(s => s.replace(/(?: at | )/g,''));
console.log( aCallerName ); 

可能是aCallerName [0]或aCallerName [1]...。

答案 4 :(得分:-2)

在回调之外定义任务名称并在需要时引用它。

var taskName = 'SOMETASK';

gulp.task(taskName, function() {
    return gulp.src(sourcePaths)
        .pipe(plumber({errorHandler: notify.onError({
            message: "<%= error.message %>",
            title: taskName
        })}));
});