gulp exports что это

Понимаем и работаем с gulp

Всем привет. Если вы связаны хоть как-то с JS, вы наверняка слышали о таком приложении как gulp. А возможно даже и использовали. По своему опыту могу сказать, что «въехать» в то, как с ним работать бывает сложно, хотя ключ к пониманию лежит на поверхности. Поэтому и публикую этот материал, надеясь, что он станет полезным.

Так же, на основе данного материала был снят видеоролик, так что можете выбирать, в каком виде потреблять.

Если сравнить gulp с другими популярными системами сборки, то это как сравнивать готовый квадрокоптер по типу “купил и полетел”, и набор для самостоятельной сборки дрона. Да, взлетите вы только на следующий день, но зато у ваших руках больше гибкости и контроля, особенно если у вас нестандартная задача.

На самом деле, после преодоления порога входа, gulp выглядит не так уж и сложно, и моментами даже понятно и логично. Но, без должной подготовки придти к такому состоянию может быть непросто. Давайте же нырнем в самое оно и рассмотрим, на каких принципах построен gulp.

Зайдем издалека. В экосистеме nodejs, существует такое понятие, как потоки, или stream. Из-за сложности перевода, потоками так же называются нити или threads многопоточной программы. В нашем же случае, поток — это объект, представляющий потоковые данные, и является совершенно иным понятием.

Так вот эти потоки предлагают удобный интерфейс для асинхронной работы с данными. Всем процессом чтения/записи занимается движок ноды, а мы имеет только соответствующие колбеки, когда появилась новая порция данных, когда произошла ошибка, когда поток закончился и т.п. Таким образом достигается эффективность ввода/вывода при минимальных затратах со стороны программиста.

Потоками в nodejs может быть практически все, начиная от файлов или строк заканчивая сокетами. Например, в известном фреймворке Express, HTTP запрос и ответ являются ни чем иным, как потоками. Потоки могут быть только на чтение, только на запись или и то и другое.

Есть у потоков одна полезная функция: их можно складывать между собой у цепочку, которая называется pipe. Таким образом, мы можем объединить несколько потоков между собой, и управлять им как одним целым. Выход одного потока идет на вход следующему и так до конца. Как можно догадаться из перевода слова pipe, это очень похоже на трубопровод.

Это позволяет определить нужный поток данных (опять сложность перевода. Здесь имеется в виду flow, или течение) прямо здесь и сейчас не дожидаясь, когда данные станут доступны.

Например, вот так вот мы можем определить, что мы хотим отдать как результат, а “как” отдавать уже занимается сам движок.

Обратите внимание, что обработчик запроса завершается до того, как файл даже откроется — остальное берет на себя движок ноды.

Gulp построен на аналогичном подходе. Это его преимущество, но это и его недостаток. Недостатком, как минимум, можно назвать из-за возникающей путаницы, поскольку gulp использует другие, похожие, но несовместимые потоки. Gulp плотно работает с файловой системой, поэтому он и использует потоки, которые представляют не столько поток данных, сколько отдельные виртуальные файлы, каждый со своим содержимым.

Если вы когда-нибудь слышали о vinyl — это как раз и есть реализация потоков, которые используют в gulp. Если мы возьмем стандартную задачу для галпа, и посмотрим что там внутри, то обнаружим, что на каждый вызов события data к нам приходит объект file, который и содержит всю необходимую информацию: имя файла, путь к файлу, рабочая директория и конечно же, его содержимое.

Содержимое может быть представлено в двух форматах: в виде уже прочитанного буфера, или же в виде родного нодовского потока. Каждая ступень галповского пайпа берет на вход такие вот файлы, делает некую трансформацию и передает на выход следующей цепочке. Последняя цепочка обычно просто сохраняет их на диск.

Осознание факта того, что потоки в gulp другие ведет к просветлению и пониманию, поскольку это объясняет большинство проблем и ошибок.

Рассмотрим реальный пример. Вы хотите использовать browserify для склейки ваших JS файлов. Вы идете, и находите плагин gulp-browserify. Но видите приписку, которая говорит, что плагин deprecated, т.е. Устарел.

Как хорошо воспитанный программист вы отметаете этот вариант, и идете искать, а какое же решение не устарело. Находите официальные рецепты от gulp, и видите, что browserify работает с галпом напрямую. Ну как напрямую, через прослойку vinyl-source-stream, которая как раз и переводит родной нодовский поток в виниловский поток, который понимает gulp. Без него ничего бы не заработало, поскольку это разные потоки.

Если вы хотите написать свою трансформацию, то можете использовать данный шаблон.
Как видим, здесь все просто: на каждый файл будет вызываться наш обработчик, который и выполнит модификации. Мы можем делать все что захотим: изменить содержимое файла, переименовать файл, удалить файл или добавить еще пару новых файлов в поток.

Как мы помним, содержимое файла в виниловском потоке может быть представлено в виде буфера или в виде потока данных. Однако не обязательно поддерживать и то другое. Всегда можно использовать пакет vinyl-buffer, который вычитает поток данных и сохранит его в буфер для последующих трансформаций.

Пока что все. Надеюсь, что вам стало немного понятнее, как работать с gulp. Спасибо.

Источник

Документация Gulp на русском

Представленная документация на русском языке является полным адаптированным переводом официальной документации Gulp. Информация регулярно обновляется и поддерживается в актуальном состоянии.

Быстрый старт

Проверьте наличие и версии node, npm и npx

Если они не установлены, следуйте инструкциям на сайте Node.js® для их установки.

Установите утилиту командной строки Gulp

Создайте каталог проекта и перейдите в него

Создайте файл package.json в каталоге вашего проекта

Это поможет вам задать имя, версию, описание проекта и другую информацию.

Установите пакет gulp в ваши зависимости devDependencies

Проверьте версию Gulp

Убедитесь, что вывод соответствует или похож на тот, что показан ниже. Если это не так, повторите шаги, описанные в этом руководстве ранее.

Создайте gulpfile

Используя редактор кода, создайте файл с именем gulpfile.js в корневом каталоге вашего проекта со следующим содержимым:

Запустите команду gulp в каталоге вашего проекта:

Результат

Дефолтный таск запущен:

JavaScript и Gulpfiles

Основы Gulpfile

Транспиляция

Вы можете писать gulpfile, используя язык, который требует транспиляции, такой как TypeScript или Babel. Измените расширение вашего gulpfile.js, чтобы указать язык и установите соответствующий модуль транспилятора.

Транспиляция — преобразование программы, при котором используется исходный код программы, написанной на одном языке программирования в качестве исходных данных, и производится эквивалентный исходный код на другом языке программирования. Википедия.

Большинство новых версий node поддерживают большинство функций, предоставляемых TypeScript или Babel, за исключением синтаксиса импорта/экспорта. Если требуется только этот синтаксис, переименуйте его в gulpfile.esm.js и установите модуль esm.

Читайте также:  Что значит треугольник в тик токе на видео

Разделение gulpfile

Многие пишут всю логику в gulpfile. Если он станет слишком большим, он может быть разбит на отдельные файлы.

Каждый таск можно вынести в отдельный файл, а затем импортировать в свой gulpfile. Это не только позволяет упорядочить проект, но и позволит вам тестировать каждую задачу отдельно, в зависимости от того, что требуется в каждом конкретном случае.

Создание задач (Тасков)

Каждая задача gulp представляет собой асинхронную функцию JavaScript, которая принимает колбэк с первым аргументом-ошибкой или возвращает поток, промис, источник событий, дочерний процесс или наблюдаемый тип (подробнее об этом позже). Из-за некоторых ограничений платформы синхронные задачи не поддерживаются, однако есть довольно изящная альтернатива (см. Использование async/await).

Экспорт

Задачи (таски) бывают общедоступными или частными.

Частная задача выглядит и действует как любая другая задача, но конечный пользователь не может выполнить ее отдельно. Чтобы сделать задачу публичной, экспортируйте ее из своего файла gulpfile.

Раньше функция task() использовалась для регистрации ваших функций в качестве тасков. Хоть этот API все еще доступен, экспорт должен быть основным механизмом регистрации, за исключением крайних случаев, когда экспорт не будет работать.

Составление тасков

Таски выполняются сразу при вызове series() или parallel(). Это позволяет варьировать состав тасков, в зависимости от условий.

series() и parallel() могут быть вложены на любую глубину.

Если у вас такой код:

Асинхронное выполнение

Библиотеки Node работают с асинхронностью различными способами. Самым распространенным является колбэк с первым аргументом-ошибкой, где первый аргумент зарезервирован для ошибки. Вы также можете столкнуться с потоками, промисами, источниками событий, дочерними процессами или наблюдаемыми типами. Gulp-таски нормализуют все эти типы асинхронности.

Сигнал выполнения задачи

Когда поток, промис, источник событий, дочерний процесс или наблюдаемый тип возвращают результат выполнения таска, об успехе или ошибке они информируют Gulp для дальнейшего продолжения или завершения. Если задание выполнено с ошибкой, Gulp немедленно прекратит работу и покажет эту ошибку.

При составлении задач с помощью series() ошибка завершит всю структуру, и дальнейшие задачи выполняться не будут. При компоновке задач с использованием функции parallel() ошибка приведет к завершению текущей компоновки, но другие параллельные задачи могут завершиться (или не завершиться, в зависимости от условий).

Возвращение потока

Возвращение промиса

Возвращение источника событий

Возвращение дочернего процесса

Возвращение наблюдаемого типа

Использование первого агрумента с ошибкой

Чтобы указать Gulp, что ошибка произошла в задаче, использующей колбек первого агрумента с ошибкой, вызовите ее с Error в качестве единственного аргумента.

Однако, чаще всего вы будете передавать этот колбек другому API, а не вызывать его самостоятельно.

Скажем «НЕТ» синхронным задачам

Синхронные задачи больше не поддерживаются. Они часто приводили к тонким ошибкам, которые трудно было отладить, например, могли забыть возвратить потоки из задачи.

Если вы видите предупреждение «Did you forget to signal async completion?», значит ни один из методов, упомянутых выше не использовался. Вам нужно будет использовать колбек первого агрумента с ошибкой или вернуть поток, промис, источник событий, дочерний процесс или наблюдаемый тип для решения проблемы.

Использование async/await

Если вы не используете ни одну из упомянутых опций, вы можете определить свою задачу как asyn функцию, которая оборачивает вашу задачу в промис. Это позволяет вам работать с промисами синхронно, используя await и использовать другой синхронный код.

Работа с файлами

Методы src() и dest() используются для взаимодействия с файлами на вашем компьютере.

src() использует glob для чтения файловой системы и создания потока Node. Он находит все подходящие файлы и считывает их в память для прохождения через поток.

Добавление файлов в поток

src() также может быть размещен в середине конвейера для добавления файлов в поток на основе Globs (Шаблонов поиска). Дополнительные файлы будут доступны только для преобразований в потоке позже. Если Globs перекрываются, файлы будут добавлены снова.

Это может быть полезно для переноса некоторых файлов перед добавлением простых файлов JavaScript в конвейер или удалением всего.

Выход по фазам (поэтапный)

dest() может использоваться в середине конвейера для записи промежуточных состояний в файловую систему. Когда файл получен, текущее состояние записывается в файловую систему, путь обновляется для представления нового местоположения выходного файла, затем этот файл продолжает движение по конвейеру.

Эта функция может быть полезна, например, для создания минимизированных и неминимизированных файлов с одним и тем же конвейером.

Режимы: потоковый, буферизованный и пустой

Шаблоны Globs

Метод src() принимает glob строку или массив для определения файлов, с которыми будет работать конвейер. Для вашего glob(s) должно быть найдено хотя бы одно совпадение, иначе src() выдаст ошибку. Когда используется массив globs, элементы обрабатываются по порядку, что особенно полезно для определения негативных globs.

Сегменты и разделители

Здесь * экранируется, поэтому он рассматривается как литерал, а не как символ шаблона.

Специальный символ: * (одиночная звезда)

Соответствует любому количеству (включая ни одного) символов в пределах одного сегмента. Полезно для выборки файлов в одном каталоге.

Специальный символ: ** (двойная звезда)

Соответствует любому количеству (включая ни одного) символов в сегментах. Полезно для выборки файлов во вложенных каталогах. Убедитесь, что вы правильно ограничили двойные звездочки, чтобы избежать ненужного сопоставления больших каталогов.

Если globs перечисляются в порядке массива, отрицательный glob должен следовать по крайней мере за одним неотрицательным glob в массиве. Первый находит набор совпадений, затем отрицательный glob удаляет часть этих результатов. При исключении всех файлов в подкаталоге необходимо добавить /** после имени каталога.

Если за отрицательным glob следуют неотрицательные globs, из более позднего набора совпадений ничего не будет удалено.

Отрицательные globs могут быть использованы в качестве альтернативы для ограничения globs с двойными звездами.

Перекрывающиеся globs

Дополнительные ресурсы

Большая часть того, что вам нужно для работы с globs в gulp, описана в дополнительных ресурсах данного раздела. Если вы хотите получить более подробную информацию, вот несколько ресурсов:

Использование плагинов

Плагины из npm, с использованием ключевых слов «gulpplugin» и «gulpfriendly» можно просматривать и искать на странице поиска плагинов.

Каждый плагин обычно выполняет какую-то небольшую часть работы, их следует использовать как строительные блоки. Возможно, вам придется использовать несколько плагинов, чтобы получить желаемый результат.

Нужен ли вам плагин?

Не всегда в gulp нужно использовать плагины. Это, конечно достаточно быстрый способ начать работу, однако многие операции выглядят лучше благодаря использованию модуля или библиотеки.

Плагины всегда преобразовывают файлы. Используйте (не подключаемый) Node-модуль или библиотеку для любых других операций.

Условные плагины

Так как операции с плагином не учитывают тип файла, вам может понадобиться плагин типа gulp-if для преобразования подмножеств файлов.

Встроенные плагины

Есть две ситуации, в которых полезно создание встроенного плагина:

Наблюдение за файлами

API watch() связывает globs с тасками используя вотчер файловой системы. Он отслеживает изменения в файлах, соответствующих шаблону или шаблонам Glob и выполняет задачу, если происходит изменение. Если задача не сигнализирует об асинхронном выполнении, она никогда не будет запущена второй раз.

Читайте также:  какой может быть ухмылка прилагательные

Этот API-интерфейс обеспечивает встроенную задержку и организацию очереди на основе наиболее распространенных значений по умолчанию.

Предупреждение: избегайте синхронности

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

Вы не получите сообщения об ошибке или предупреждения, потому что средство отслеживания файлов поддерживает ваш процесс Node. Поскольку процесс не завершается, невозможно определить, выполнена ли задача или для ее выполнения просто требуется много времени.

Наблюдаемые события

Начало исполнения

После вызова watch() задачи не будут выполнены, вместо этого они будут ждать первого изменения файла.

Очередь

Каждый watch() гарантирует, что выполняемая в данный момент задача не будет выполнена снова. Если изменение файла происходит во время выполнения задачи вотчера, другое выполнение будет поставлено в очередь и запущено после завершения задачи. Только один запуск может быть поставлен в очередь за раз.

Задержка

После изменения файла задача наблюдателя не будет запущена, пока не истечет задержка в 200 мс. Это сделано для того, чтобы избежать слишком раннего запуска задачи, когда множество файлов изменяется одновременно. Например, поиск и замена.

Чтобы настроить длительность задержки, установите для параметра задержки положительное целое число.

Использование экземпляра вотчера

Будьте внимательны: возвращенный экземпляр chokidar не имеет функций очереди, задержки или асинхронного завершения.

Необязательная зависимость

Концепции API

Следующие понятия являются базовыми для понимания документации API.

Vinyl

Адаптеры Vinyl

Хотя Vinyl предоставляет способ описания файла, необходим способ доступа к этим файлам. Доступ к каждому источнику файлов осуществляется с помощью адаптера Vinyl.

Задачи (Tasks)

Каждая задача gulp представляет собой асинхронную функцию JavaScript, которая либо принимает колбек с ошибкой, либо возвращает поток, промис, источник событий, дочерний процесс или наблюдаемый тип. Из-за некоторых ограничений платформы синхронные задачи не поддерживаются.

Для более подробного объяснения см. Создание задач.

Globs

Если у вас нет опыта работы с globs, см. Шаблоны Globs.

Основа Glob

Для получения более подробной информации см. репозиторий glob-parent.

Статистика файловой системы

Режимы файловой системы

Модули

Gulp состоит из множества небольших модулей, которые объединены для совместной работы. Используя semver в небольших модулях, мы можем выпускать исправления ошибок и функции без публикации новых версий gulp. Часто, когда вы не видите прогресса в основном хранилище, работа выполняется в одном из этих модулей.

Создает поток для чтения объектов Vinyl из файловой системы.

Использование

Параметры

Параметр Тип Примечание
globs строка, массив Globs для просмотра в файловой системе.
option объект Подробнее в опциях ниже.

Возвращает

Поток, который можно использовать в начале или в середине конвейера для добавления файлов на основе заданных globs.

Ошибки

Когда в globs указан недопустимый glob, выдается сообщение об ошибке «Invalid glob argument».

Опции

Для опций, которые принимают функцию, переданная функция будет вызываться с каждым объектом Vinyl и должна возвращать значение другого из перечисленных типов.

Sourcemaps

Создает поток для записи объектов Vinyl в файловую систему.

Использование

Параметры

Параметр Тип Примечание
directory (обязательный) string, function Путь к выходному каталогу, в который будут записываться файлы. Если используется функция, функция будет вызываться с каждым объектом Vinyl и должна возвращать строку пути к каталогу.
options object Подробнее в опциях ниже.

Возвращает

Всякий раз, когда файл создается в файловой системе, объект Vinyl будет изменен.

Ошибки

Если directory представляет собой пустую строку, выдается сообщение об ошибке «Invalid dest() folder argument. Please specify a non-empty string or a function.».

Если directory не является строкой или функцией, выдается сообщение об ошибке «Invalid dest() folder argument. Please specify a non-empty string or a function.».

Если directory является функцией, которая возвращает пустую строку или не определена, выдается ошибка с сообщением «Invalid output folder».

Опции

Для опций, которые принимают функцию, переданная функция будет вызываться с каждым объектом Vinyl и должна возвращать значение другого из перечисленных типов.

Обновления метаданных

Когда поток dest() создает файл, объекты Vinyl mode mtime и atime сравниваются с созданным файлом. Если они различаются, созданный файл будет обновлен в соответствии с метаданными объекта Vinyl. Если эти свойства одинаковы или gulp не имеет прав для внесения изменений, попытка пропускается без уведомления.

Примечание. Метод fs.futimes() внутренне преобразует метки времени mtime и atime в секунды. Это деление на 1000 может привести к некоторой потере точности в 32-битных операционных системах.

Sourcemaps

Символические ссылки в Windows

symlink()

Создает поток для связи объектов Vinyl с файловой системой.

Использование

Параметры

Параметр Тип Примечание
directory (обязательный) string, function Путь к выходному каталогу, в котором будут созданы символические ссылки. Если используется функция, функция будет вызываться с каждым объектом Vinyl и должна возвращать строку пути к каталогу.
options object Подробно в опциях ниже.

Возвращает

Поток, который можно использовать в середине или в конце конвейера для создания символических ссылок в файловой системе. Всякий раз, когда объект Vinyl пропускается через поток, он создает символическую ссылку на исходный файл в файловой системе в текущем каталоге.

Всякий раз, когда в файловой системе создается символическая ссылка, объект Vinyl будет изменен.

Примечание. В Windows ссылки на каталоги создаются с использованием соединений по умолчанию. Опция useJunctions отключает это поведение.

Ошибки

Если directory является пустой строкой, вы получите сообщение об ошибке «Invalid symlink() folder argument. Please specify a non-empty string or a function.».

Если directory не является строкой или функцией, выдается сообщение об ошибке «Invalid symlink() folder argument. Please specify a non-empty string or a function.».

Опции

Для опций, которые принимают функцию, переданная функция будет вызываться с каждым объектом Vinyl и должна возвращать значение другого из перечисленных типов.

Символические ссылки в Windows

lastRun()

Получает отметку времени последнего раза, когда задача была успешно завершена во время текущего рабочего процесса. Наиболее полезно при выполнении последующих задач во время работы вотчера.

В сочетании с src() включает инкрементные сборки для ускорения выполнения, пропуская файлы, которые не изменились с момента последнего успешного завершения задачи.

Использование

Параметры

Параметр Тип Примечание
task (обязательный) function
string
Функция таска или псевдоним строки зарегистрированной задачи.
precision number По умолчанию: 1000 на Node v0.10 и 0 на Node v0.12+. Подробно в разделе «Точность временной метки» ниже.

Возвращает

Ошибки

При вызове со значением, отличным от строки или функции, выдается ошибка с сообщением «Only functions can check lastRun».

Если вызывается для нерасширяемой функции, а в Node отсутствует WeakMap, выдается ошибка с сообщением: «Only extensible functions can check lastRun».

Точность временной метки

Хотя существуют точные значения по умолчанию для точности меток времени, они могут быть округлены с использованием параметра точности. Полезно, если ваша файловая система или версия Node имеют точность с потерями в атрибутах времени файла.

Точность mtime stat файла может варьироваться в зависимости от версии Node и/или используемой файловой системы.

Платформа Точность
Node v0.10 1000ms
Node v0.12+ 1ms
Файловая система FAT32 2000ms
Файловая система HFS+ или Ext3 1000ms
NTFS с использованием Node v0.10 1s
NTFS с использованием Node 0.12+ 100ms
Ext4 с использованием Node v0.10 1000ms
Ext4 с использованием Node 0.12+ 1ms

series()

Использование

Параметры

Параметр Тип Примечание
tasks (обязательный) function
string
В качестве отдельных аргументов может быть передано любое количество функций задач. Строки можно использовать, если вы уже зарегистрировали задачи, но так делать не рекомендуется.

Возвращает

Когда выполняется составная операция, все задачи (таски) будут выполняться последовательно. Если ошибка возникает в одной задаче, никакие последующие задачи запущены не будут.

Ошибки

Если никакие задачи не передаются, выдается ошибка с сообщением «One or more tasks should be combined using series or parallel».

Если передаются недопустимые или незарегистрированные задачи, выдается сообщение об ошибке «Task never defined».

Прямые ссылки

В более новых версиях вы получите сообщение об ошибке «Task never defined», если попытаетесь использовать прямые ссылки. Это может возникнуть при попытке использовать exports для регистрации задач и составления задач по строке. В данной ситуации используйте именованные функции вместо строковых ссылок.

Во время миграции вам может понадобиться использовать реестр прямых ссылок. Однако это значительно замедлит вашу сборку. Данный фикс не будет работать всегда, это лишь временное решение.

Избегайте дублирования задач

При выполнении составной операции каждая задача будет выполняться каждый раз, когда до нее доходит дело.

Если у вас есть такой код:

parallel()

Использование

Параметры

Параметр Тип Примечание
tasks (обязательный) function
string
В качестве отдельных аргументов может быть передано любое количество функций задач. Строки можно использовать, если вы уже зарегистрировали задачи, но так делать не рекомендуется.

Возвращает

Когда выполняется составная операция, все задачи (таски) будут выполняться параллельно. Если ошибка возникает в одной задаче, другие задачи могут завершиться недетерминированно или не завершиться.

Ошибки

Когда никакие задачи не передаются, выдается ошибка с сообщением «One or more tasks should be combined using series or parallel».

Когда передаются недопустимые или незарегистрированные задачи, выдается сообщение об ошибке «Task never defined».

Прямые ссылки

В более новых версиях вы получите сообщение об ошибке «Task never defined», если попытаетесь использовать прямые ссылки. Это может возникнуть при попытке использовать exports для регистрации задач и составления задач по строке. В данной ситуации используйте именованные функции вместо строковых ссылок.

Во время миграции вам может понадобиться использовать реестр прямых ссылок. Однако это значительно замедлит вашу сборку. Данный фикс не будет работать всегда, это лишь временное решение.

Избегайте дублирования задач

При выполнении составной операции каждая задача будет выполняться каждый раз, когда до нее доходит дело.

Если у вас есть такой код:

watch()

Позволяет наблюдать за globs и запускать задачи при изменении. Задачи обрабатываются как обычно с остальной частью системы задач.

Использование

Параметры

Возвращает

Экземпляр chokidar для детального контроля над настройками вотчинга.

Ошибки

Если non-string или массив с какими-либо non-strings’s передается в виде globs, выдается ошибка с сообщением «Non-string provided as watch path».

Опции

Экземпляр chokidar

Метод watch() возвращает базовый экземпляр chokidar, предоставляя полный контроль над настройкой вотчинга. Чаще всего используется для регистрации отдельных обработчиков событий, которые предоставляют path или stats измененных файлов.

При непосредственном использовании экземпляра chokidar у вас не будет доступа к интеграции системы задач, включая асинхронное завершение, организацию очереди и задержку.

Выключает средство просмотра файлов. После выключения больше событий не будет.

Добавляет дополнительные globs к уже запущенному экземпляру вотчера.

Параметр Тип Примечание
globs string
array
Дополнительные globs для просмотра.

watcher.unwatch(globs)

Удаляет наблюдаемые globs, пока вотчер продолжает работу с оставшимися путями.

Параметр Тип Примечание
globs string
array
Globs к удалению.

Внимание: использование данного API не рекомендуется в настоящее время. Экспортируйте ваши задачи.

Использование

Зарегистрируйте именованную функцию как задачу:

Зарегистрируйте анонимную функцию как задачу:

Получить задачу, которая была зарегистрирована ранее:

Параметры

Поскольку любая зарегистрированная задача может быть запущена из командной строки, избегайте использования пробелов при именовании задач.

Возвращает

При регистрации задачи ничего не возвращается.

Ошибки

При регистрации задачи, в которой TaskName отсутствует и функция TaskFunction является анонимной, выдается сообщение об ошибке «Task name must be specified».

Метаданные задачи

registry()

Позволяет подключать пользовательские реестры к системе задач, которые предоставляют общие задачи или расширенную функциональность.

При назначении нового реестра каждая задача из текущего реестра будет перенесена, а текущий реестр будет заменен новым. Это позволяет добавлять несколько пользовательских реестров в последовательном порядке.

Использование

Параметры

Параметр Тип Примечание
registryInstance object Экземпляр (не класс) пользовательского реестра.

Возвращает

Ошибки

Использование

Параметры

Возвращает

Объект, детализирующий дерево зарегистрированных задач, содержащий вложенные объекты со свойствами ‘label’ и ‘nodes’ (совместимые по archy).

Опции

Опция Тип Дефолт. Примечание
deep boolean false Если true, будет возвращено все дерево. Если false, будут возвращены только задачи верхнего уровня.

Vinyl

Использование

Параметры

Возвращает

Экземпляр класса Vinyl, представляющий один виртуальный файл.

Ошибки

Если какие-либо переданные параметры не соответствуют определениям свойств экземпляра (например, если path задан как число), происходит выброс, как определено в таблице.

Опции

Любые другие свойства options будут напрямую назначены экземпляру Vinyl.

Экземпляр Vinyl

Каждый экземпляр объекта Vinyl будет иметь свойства и методы для доступа и/или изменения информации о виртуальном файле.

Свойства экземпляра

Все пути с внутренним управлением (любое свойство экземпляра, за исключением contents и stat ) нормализуются и удаляются конечные разделители. См. «Нормализация и объединение» ниже, для получения дополнительной информации.

Методы экземпляра

Нормализация и конкатенация

Vinyl.isVinyl()

Примечание. В этом методе используется внутреннее свойство, которое не отображалось в некоторых старых версиях Vinyl, что приводит к ложному отрицанию (!) при использовании устаревшей версии.

Использование

Параметры

Возвращает

true, если объект файла является экземпляром Vinyl.

Vinyl.isCustomProp()

Этот метод полезен при расширении класса Vinyl. Подробно в «Расширение Vinyl» ниже.

Использование

Параметры

Параметр Тип Примечание
property string Наименование свойства для проверки.

Возвращает

true, если свойство не управляется изнутри.

Расширение Vinyl

Когда пользовательские свойства управляются внутри, статический метод isCustomProp должен быть расширен и возвращать значение false, если запрашивается одно из пользовательских свойств.

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

Премиум уроки от WebDesign Master

Создание сайта от А до Я. Комплексный курс

Создание современного интернет-магазина от А до Я

Источник

Читайте также:  хтонь это что значит слово
Сказочный портал