Ответ 1
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 );
}
Я использую 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
});
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 );
}
gulp.task('SOMETASK',function() {
console.log('Task name:', this.seq.slice(-1)[0]) // Task name: SOMETASK
})
Если вы хотите использовать обезьяну-патч 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> gulp build
[16:38:54] Использование gulpfile c:\project\gulpfile.js
[16:38:54] Запуск 'jshint'...
this.currentStartTaskName: build
this.currentRunTaskName: jshint
[16:38:54] Закончен "jshint" после 244 мкс
[16:38:54] Запуск 'jscs'...
this.currentStartTaskName: build
this.currentRunTaskName: jscs
[16:38:54] Закончен "jscs" после 152 мкс
[16:38:54] Начиная "строить"...
[16:38:54] Закончил сборку после 3.54 мкс
Определите имя задачи за пределами обратного вызова и укажите его там, где это необходимо.
var taskName = 'SOMETASK';
gulp.task(taskName, function() {
return gulp.src(sourcePaths)
.pipe(plumber({errorHandler: notify.onError({
message: "<%= error.message %>",
title: taskName
})}));
});