Есть ли способ запустить конкретную задачу, когда задача, предоставленная пользователем, отсутствует в gulpfile
.
Например, если пользователь запускает gulp build
gulpfile
и задача build
не существует в gulpfile
тогда должна выполняться конкретная задача (или задача по умолчанию для меня не имеет значения).
В качестве аналогии рассмотрим указанную задачу как страницу 404 для gulp
.
gulp
наследует от orchestrator
, который содержит переменную экземпляра tasks
которая представляет собой простой объект с ключами, которые являются именами задач, добавленных в экземпляр. Если вы заменили tasks
proxy
, вы можете вернуть ему задачу по умолчанию, например, по default
с помощью обработчика get
trap:
const gulp = require('gulp')
gulp.tasks = new Proxy(gulp.tasks, {
get (target, property) {
if (target.hasOwnProperty(property)) {
return target[property]
}
return target.default
}
})
Этот код можно запускать в любое время до начала последовательности задач, даже после того, как некоторые задачи уже добавлены в экземпляр gulp
.
Ответ Патрика был действительно полезен. Мне пришлось немного изменить, так как я получил предупреждение ESLint и следующую ошибку:
TypeError: this.tasks.hasOwnProperty is not a function
Поэтому я также решил опубликовать свои изменения. Здесь мой последний код -
gulp.tasks = new Proxy(gulp.tasks, {
get: function(target, property) {
if (undefined !== target[property]) {
return target[property];
}
return target.default; //or target["<Custom task name>"]
}
});
yoda
при заказе undefined !== target[property]
gulp build || gulp
для вызова поdefault
еслиbuild
не удалась или не существует.