Запускать конкретную задачу, если нужной пользователю задачи нет в файле gulpfile.

1

Есть ли способ запустить конкретную задачу, когда задача, предоставленная пользователем, отсутствует в gulpfile.

Например, если пользователь запускает gulp build gulpfile и задача build не существует в gulpfile тогда должна выполняться конкретная задача (или задача по умолчанию для меня не имеет значения).

В качестве аналогии рассмотрим указанную задачу как страницу 404 для gulp.

  • 0
    Вы можете запустить gulp build || gulp для вызова по default если build не удалась или не существует.
  • 0
    @PatrickRoberts Я не собираюсь запускать эти задачи, другие разработчики будут, и я хочу показать им значимое сообщение о том, что делать, когда задачи нет.
Теги:
gulp

2 ответа

1
Лучший ответ

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.

  • 1
    Спасибо! Это именно то, что я искал.
0

Ответ Патрика был действительно полезен. Мне пришлось немного изменить, так как я получил предупреждение 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>"]
    }
});
  • 0
    Я удивлен, что вы не получаете ошибку yoda при заказе undefined !== target[property]
  • 0
    Я использую этот способ, чтобы случайно не назначить неопределенные переменные. Я думаю, что неопределенная проверка защищена от йода ;-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню