English description | Описание на русском
Каждый таск представляет из себя commonJS-модуль. Все таски включаются в gulpfile в корне проекта автоматически.
По умолчанию в gulpfile.js находятся только ссылки на основные таски, например, build ссылается на main:build. Таким образом вы сможете переопределить абсолютно любой таск, совсем не влезая в структуру сборщика.
Свои таски можно создавать в директории user-tasks. По умолчанию там уже находится пример таска. Вообще, в TARS можно подключить любой gulp-task.
По умолчанию каждому таску требуется набор модулей для корректной работы:
const gulp = tars.packages.gulp;
const gutil = tars.packages.gutil;
const notifier = tars.helpers.notifier;
Также, если требуется использовать livereload для данного таска, подключаем модуль browserSync:
const browserSync = tars.packages.browserSync;
Если требуются какие-либо еще зависимости, подключаем их тут же. При этом, зависимости, которых нет в основном package.json, можно занести в user-package.json, который находится в корне проекта. Формат такой же, как и у основного package.json
Не помещайте свои собственные зависимости в package.json. Помещайте их user-package.json Исключением здесь может быть использование TARS-CLI. При инициализации проекта с помощью TARS-CLI и стандартного архива с TARS (из текущего репозитория) user-package.json не создается в папке с проектом. Вместо него будет обычный package.json TARS-CLI позволяет инициализировать TARS с помощью любого zip-архива с TARS. Если вам необходимо, чтобы в package.json уже были какие-либо пакеты, то в вашем форке TARS занесите все пользовательские зависимости в user-package.json и они автоматом окажутся в package.json нового проекта при инициализации с помощью TARS-CLI. Данная функциональность доступна для TARS-CLI начиная с версии 1.1.8.
После подключения зависимостей идет тело модуля, который будет экспортировать таск. Каждый таск описывается внутри экспортируемой функции. Во всех тасках и вотчерах досутпен глобальный объект tars, в котором находятся все данные, конфиги и т.д. текущего проекта. Экспортируемая функция возвращает полноценный gulp-таск. Далее делаем все как и с обычным таском для gulp.
Если требуется нотификация, то таск должен оканчиваться следующим образом:
// If you need to reload browser, uncomment the row below
// .pipe(browserSync.reload({stream:true}))
.pipe(
notifier('Example task is finished \n')
);
В notifier передается строка, которая будет показываться в уведомлениях.
Также можно вызвать callback, или вернуть основной поток, если требуется выполнять таски в определенном порядке. Более подробно здесь.
Может показаться, что в некоторых местах есть излишний код, есть обращения к файлам, а не потокам. Такие места есть, но это сделано в угоду модульности и легкой расширяемости. На самом деле, на скорость работы сборщика именно эти места не влияют.