Gulp cli что это
Command Line Utility for Gulp
The task(s) listed on the command line will be executed. If more than one task is listed, Gulp will execute all of them concurrently, that is, as if they had all been listed as dependencies of a single task.
Thanks to the grunt team, specifically Tyler Kellen
You can find a list of supported languages at https://github.com/js-cli/js-interpret. If you would like to add support for a new language, send pull requests/open issues on that project.
The CLI adds process.env.INIT_CWD which is the original cwd it was launched from.
Configuration from the home directory (
) and current working directory ( cwd ) are merged with cwd taking precedence.
Supported configurations properties:
| Property | Description |
|---|---|
| description | Top-level description of the project/gulpfile (Replaces «Tasks for gulp has very few flags to know about. All other flags are for tasks to use if needed. Some flags only work with gulp 4 and will be ignored when invoked against gulp 3. Используем Gulp для ускорения процесса версткиЧто такое Gulp? Как его установить? Как им пользоваться? Что такое Gulp?
Представьте, что для поддержки прежних версий браузеров, вам бы пришлось вручную искать и дублировать каждое CSS свойство, которое требует префикса для определенной версии браузера. Так с каждым свойством для каждой необходимой версии браузера. Gulp, с плагином gulp-autoprefixer, делает это автоматически в реальном времени Думаю, только этот пример уже не оставляет сомнений в полезности Gulp, а таких плагинов для Gulp более 4 тысяч Как установить Gulp?Чтобы установить Gulp, сначала необходимо установить Node.js После того, как Node.js установлен, переходим к установке Gulp Нажимаем на клавиатуре сочетание клавиш Win+R В открывшемся окне Выполнить вводим cmd и нажимаем “ОК” Если ранее пробовали устанавливать Gulp, то необходимо удалить прежнюю версию, для этого введем и запустим клавишей Enter команду После удаления прежней версии Gulp, или если устанавливаем Gulp впервые, вводим команду Когда процесс установки закончится, проверим, что Gulp корректно установлен, с помощью команды Стартовый шаблон gulp-devНа данный момент, не будем углубляться во все подробности работы Gulp. Вместо этого покажу свой шаблон Gulp, расскажу его возможности и как им пользоваться. Что входит в данный шаблонДанный набор инструментов позволяет ускорить процесс верстки в разы Также в шаблон добавлены сброс стилей Bootstrap Reboot и jQuery, так как использую их в каждом проекте. Они добавлены как статичные файлы, к Gulp они не относятся. При необходимости можно просто отключить их в файле app/pug/index.pug Установка шаблона gulp-devЗаходим на страницу шаблона gulp-dev Кратко расскажу о некоторых файлах (про папки dist и app расскажу ниже) Нажимаем на “Code”, затем на “Download ZIP” Создадим новую папку new_project для проекта (например, на рабочем столе) Открываем скачанный ZIP-файл gulp-dev-main, внутри ZIP-файла открываем папку gulp-dev-main и копируем все её содержимое в созданную на рабочем столе папку new_project Далее нажимаем на клавиатуре сочетание клавиш Win+R В открывшемся окне Выполнить вводим cmd и нажимаем “ОК” В окне командной строки необходимо перейти в созданную папку new_project В командной строке пишем cd и через пробел путь до папки (можно скопировать из адресной строки окна и вставить в командной строке правой кнопкой мыши или сочетанием клавиш “Shift+Insert”) и нажимаем Enter Следующие команды будем запускать для папки new_project Далее, устанавливаем все выше перечисленные инструменты одной командой В папке с проектом появится папка node_modules, в которой хранятся все необходимые файлы для работы Gulp. Изменять или удалять папку node_modules нельзя Запускаем Gulp командой Когда Gulp будет запущен, автоматически откроется браузер с начальной страницей шаблона Окно командной строки, где запустили Gulp, не закрываем до завершения работы с ним Что происходит при запуске Gulp?Постараюсь простыми словами объяснить, что делает Gulp при запуске шаблона gulp-dev Структура шаблонаСтруктуру и названия папок не меняем! Менять структуру и названия можно только при условии, что решите редактировать настройки Gulp в файле gulpfile.js Пример использованияПо Pug и Stylus будут следующие статьи. На данный момент, просто посмотрим как автоматически генерируются index.html и main.css и обновляется страница при их изменении Откроем файл index.pug (app/pug/index.pug) в редакторе кода (я использую Sublime Text 3) Внесем изменения в index.pug Повторюсь, синтаксис Pug разберем в одной из следующих статей Сохраняем index.pug с внесенными изменениями, при этом автоматически генерируется index.html и страница в браузере перезагружается Аналогично откроем main.styl (app/styl/main.styl) ИтогиСледующие статьи будут про Pug и Stylus, в них рассмотрим синтаксис и базовые возможности этих инструментов Gulp cli что это Что такое gulp и зачем он нуженGulp — это инструмент, который помогает разработчикам автоматизировать рутинные задачи. Чаще всего gulp используется в frontend разработке для таких задач: Если вы внедрите в свою практику эту систему, вы значительно увеличите скорость вашей работы. Так же gulp откроет вам путь к новым возможностям, который значительно повысит ваш уровень знаний в веб-разработки. Установка GulpУстановка Gulp 4 довольно простая. Так как Gulp написан на языке javascript, изначально необходимо установить Node.js на вашу систему. Просто заходите на сайт https://nodejs.org, скачиваете инсталятор последний версии и устанавливаете. Далее создаем папку для проекта в любом удобном месте компьютера и вызываем окно терминала в этом каталоге. В командной строке запускаем инициализацию проекта: Отвечаем на вопросы на каждом шаге. После каждого ввода нажимаем Enter и переходим к следующему шагу. В результате получим файл package.json, который содержит информацию о проекте и установленных плагинах. Далее установим gulp в наш проект: После установке Gulp 4 название пакета и его версия сохранятся в файле package.json. Флаг —save-dev используется для сохранения пакета в package.json в раздел devDependencies, то есть в целях разработки. Если установить пакет с флагом —save, то пакет попадает в раздел dependencies (для запуска приложения). Такой подход дает возможность сохранять все пакеты в файле package.json со всеми зависимостями, а при разворачивании нового проекта достаточно скопировать файл package.json и запустить команду: Таким образом все пакеты и зависимости установятся автоматически. После установки gulp в каталоге проекта создалась папка node_modules. Все новые установленные пакеты и зависимости сохраняются в данную папку. Поэтому изменять содержимое этого каталога нельзя. Далее в каталоге проекта создаем файл gulpfile.js. Это самый основной файл, без которого Gulp работать не может. По сути в него можно писать любой javascript код, но gulp — это менеджер управления задачами, и эти задачи описываются в этом файле в виде обычных функций. Что бы запускать эти задачи, функцию нужно экспортировать через оператор exports. Пример: На примере выше мы создали задачу под название testTask, в которой выводим строчку test. После этого мы экспортируем эту задачу. Что бы Gulp знал, что задача выполнена, мы вызываем функцию обратного вызова done. Что бы запустить Gulp, можно установить отдельную утилиту глобально на вашу систему: После этого в консоли вводим команду gulp и через пробел название задачи: Но есть и альтернативный вариант. Можно передать дополнительные параметры командам запуска в файле package.json для раздела scripts: В этом случае запускается задача так: gulp — это значение с раздела scripts файла package.json, а test — название задачи. В итоге в консоле выведется слово test: Задача по умолчанию (gulp default task)Создадим в файле gulpfile.js задачу по умолчанию. Этот такс лучше всего представить, как точку входа в наш проект. Цель этой задачи — собрать и запустить таски в определенной последовательности, которые gulp должен выполнить по умолчанию. В нашем случае мы заменим таск test на default в функции экспорта: Теперь для запуска проекта нам необходимо ввести: Таким образом мы получим такой же результат, как и раньше, но при этом мы не указываем конкретный таск, а запускаем задачу по умолчанию. Gulp parallel, gulp seriesВ Gulp существуют методы parallel и series для объединения задач в цепочки. Метод parallel запускает задачи одновременно в любой последовательности. Метод series — выполняет задачи одна за одной в указанном порядке: На примере выше, задачи a и b запускаются параллельно. Только после завершения этих задач, запускаются таски c и d в паралельном режиме. Gulp src, gulp dist, gulp pipeПрежде чем приступать к практике, определимся еще с некоторыми базовыми понятиями. Ранее мы создали тестовый таск, который просто выводит значение в консоль. Но смысл gulp в том, чтобы выполнять рутинные задачи в процессе разработки. Другими словами — взять какой-то файл нашего проекта, выполнить определенные манипуляции с ним, и на выходе получить обновленный файл. Для того, чтобы указать входной файл, используется выражение gulp.src(‘source-file’), а исходящий — gulp.dest(‘dest-folder’). Давайте рассмотрим на примере: Первой строчкой подключаем сам gulp в наш проект. Далее создаем таск, как мы делали это ранее. Указываем gulp что мы работаем с файлом test.js. После этого через метод pipe говорим gulp, что исходная папка называется output. Таким образом мы просто скопировали файл test.js в папку output. Метод pipe — это основное API для gulp. Этот метод как бы объединяет все операции внутри таска. Через pipe можно выстроить неограниченную цепочку из операций для создания определенных сценариев. Шаблоны путей к файламОчень часто необходимо на вход gulp передать не конкретный файл, а группу файлов. Для этого используют так называемые шаблоны. Рассмотрим на примере какие они бывают: ./input/*.js — выберет все файлы с расширением js в корне папки input ./input/**/*.js — выберет все файлы с расширением js в корне папки input и дочерних каталогах !./input/test.js — исключает файл test.js из выборки ./input/*.+(js, css) — выберет файлы js и css Так же, в качестве входных данных в gulp можно передавать массив с несколькими файлами или шаблонами: На примере мы выбираем все файлы с расширением css, но исключаем файл test.css. Gulp плагиныСтандартный функционал gulp достаточно примитивен. Для того, чтобы реализовать более сложные операции, необходимо использовать так называемые плагины. Другими словами, это расширение, которое мы подключаем к себе в проект для решения той или иной задачи. Существует огромное количество плагинов для gulp. Найти и посмотреть их описание можно на официальном сайте. Ранее мы написали скрипт, который просто копирует файл в другую папку. Давайте усложним задачу: при копировании имя файла должно переименовывается. Для этого как раз и воспользуемся плагином, который называется gulp-rename. Для начала, установим этот плагин: Любой плагин, как и npm модуль, устанавливается в папку node_modules, и попадает в файл package.json. Далее его нужно подключить в gulpfile.js, и через метод pipe вызвать необходимую операцию: Таким образом, мы берем файл test.js, переименовываем его в testNew.js, и копируем в папку output. Gulp сборка для верстки сайта. Стартовый шаблонИ так, мы установили Gulp, настроили окружение и можем переходить к созданию своей сборки для верстки сайта. Для начала поставим себе задачу: мы хотим создать стартовый шаблон для начала работы с любым проектом. Сборка будет выполнять ряд задач: работа с препроцессорами, минификация кода, сжатия и преобразования изображений, конвертация шрифтов, сборка спрайтов, подключение отдельный частей html в единый шаблон и многое другое. Режимы работыGulp сборка должна запускаться в двух режимах: сборка проекта для разработки и сборка для продакшин. В режиме разработки важна скорость работы, поэтому мы не будем минифицировать код, сжимать изображение и выполнять другие трудоемкие операции. В режиме продакшин мы подготавливаем наш проект к дальнейшему использованию или выгрузке на хостинг, очищаем от всего лишнего, сжимаем код и выполняем другие действия. Давайте это реализуем. В файле package.json в раздел scripts вносим некоторые изменения: Для запуска сборки в режиме разработки необходимо ввести команду: Для запуска в режиме продакшин: Как видим выше, в режиме прод мы добавляем переменную окружения prod. Далее, чтобы определить в каком режиме мы работаем, необходимо установить плагин yargs: Подключаем этот плагин в gulpfile.js: Если запустить сборку в режиме дев, то значение переменной argv.prod будет равно undefined, а если в прод режиме, то true. Таким образом, если переменная argv.prod равна true, то мы работаем в прод режиме. Если не true, то дев режим. Для удобства, создадим две функции, которые проверяют режим работы: Файловая структура gulp сборкиСоздадим базовую структуру файлов и папок. Это стандартная структура любого web проекта, которую можно поменять под свой вкус и потребности. Рассмотрим предназначение каждой папки и файла: Это основная файловая структура сборки, но она будет меняться в ходе работы. Давайте сразу добавим файл .gitignore в корень проекта со следующим содержимым: Здесь мы скрываем каталоги dist и node_modules от систем контроль версий, так как они создаются автоматически. Настройка путейСоздадим в корне проекта файл projectConfig.json. Это простой json файл, в него мы будем записывать различные настройки для нашей сборки. Для начала определим переменные для путей: Мы определили переменную path, которая в свою очередь содержит два значения: настройки путей для исходников проекта и для готового результата. В конечном итоге мы можем изменять эти значения, что дает гибкость нашей gulp сборки. В процессе работы мы будем добавлять необходимые нам настройки. Далее в gulpfile.js подключим файл с настройками: Теперь можно обратится к переменной path и получить необходимые значения. Browser sync gulp. Автоматическое обновление страницы в браузереBrowser sync — это очень полезный плагин. Он позволяет открыть страницы сайта, используя локальный сервер, и настроить автоматическую перезагрузку сайта. Установим плагин browsersync в наш проект: В файле gulpfile.js добавим описание таска для плагина browsersync. На данном этапе файл gulpfile.js выглядит так: Все как обычно: подключаем browserSync через require, описываем задачу для него, и запускаем таск по умолчанию. Теперь при запуске gulp автоматически откроется браузер. На данном этапе нам этого будет достаточно. Gulp htmlДля работы с html, будем использовать шаблонизатор nunjucks (подробнее почитать можно тут). Для начала определим структуру каталога и файлов для штмл файлов: Рассмотрим подробнее файловую структуру: Нижний прочерк в названии файлов и папок говорит о том, что они подключаются в основной файл. Далее зададим настройки путей для html в файле projectСonfig.json. В раздел src добавим массив со значением папки, где находятся штмл файлы, относительно каталога с исходниками проекта. Аналогично добавим значения для исходящего файла в раздел dist. В gulpfile.js создадим массив путей для входных файлов: В первой строке формируем путь к html файлам, которые нужно скомпилировать. Во второй запрещаем компилировать файлы, которые начинаются с нижнего прочерка. В третей и четвертой запрещаем компиляцию с папки assets и _html. В итоге получим такой массив: Так же формируем переменную для папки с готовыми html файлами: В результате получим такое значение: И так, пути мы сформировали, теперь описываем задачу для html файлов: Как видим, это обычная задача для gulp. В конце этого таска мы автоматически перезагружаем браузер. Создадим общий каркас для всех страниц сайта в файле _default.html: В файлах _header.html и _footer.html выведем верхнюю и нижнюю части сайта, которые мы подключаем к основному шаблону. _header.html: В файле index.html находится основная часть главной страницы сайта: На примере выше мы определили переменные title страницы и класса тега body. В процессе работы можно добавлять другие переменные и передавать их в основной шаблон. Далее мы указываем, что наследуем основной шаблон и в блоке content описываем контентную часть страницы. Таким образом мы можем создавать общие html файлы для нашего проекта, подключать их в шаблон и менять содержимое в одном месте. Теперь запустим на выполнение таск: В результате получим такую страницу: Как видим, все исходники скомпилировались в один файл index.html. Теперь можно создавать сколь угодно html файлов и все они будут собираться в папке dist. Gulp watch. Отслеживаем изменения в файлахВ Gulp предусмотрен метод watch, с помощью которого можно отслеживать изменения в том или ином файле. Если мы, например, модифицировали наш файл index.html, то с помощью метода watch можно автоматически запустить тот или иной таск. Реализуем это в нашей сборке. Для начала в переменной path определим свойство watch как пустой объект: В ней укажем файлы, которые нужно отслеживать для сборки html: То есть, мы отслеживаем все файлы в папке src. Создадим gulp tack для отслеживания изменений в файлах: На примере выше мы создали обычный таск, в нем вызываем метод watch, в который передаем два параметра: какие фалы отслеживаем, и какой таск запускаем при модификации в этих файлах. После этого изменим дефолтный таск: Здесь сначала запускается таск njk, после этого в параллельном режиме запускаем локальный сервер и отслеживание в файлах. Теперь при запуске дефолтного таска откроется главная страница на локальном сервере. При изменении в штмл файлах сайт обновляется автоматически уже с измененными данными. Gulp scss. Работа со стилямиВ качестве препроцессора для стилей будем использовать SASS в синтаксисе SCSS. В папке src/assets/css создадим файл app.scss. Это будет основной файл стилей. В projectСonfig.json задаем настройки путей к файлам стилей. В разделе src добавляем: В gulpfile.js задаем массив путей для файлов стилей: Сразу откроем наш основной шаблон _default.html и в раздел head добавим файл стилей, который будет называется app.min.css: Далее добавляем нужные плагины для работы со стилями: Подключаем все эти плагины: Далее создаем gulp таск для CSS стилей: Рассмотрим детально код выше. С помощью плагина gulpif мы проверяем в каком режиме мы работаем. Если в дев режиме, то мы инициализируем sourcemaps, выполняем компиляцию sass, сохраняем sourcemaps в конец файла, добавляем суффикс min к названию файла, сохраняем готовый файл и перезагружаем браузер. Таким образов, в папке dist/css создастся файл app.min.css. Несмотря на то, что мы добавили суффикс min, стили в нем не сжаты и добавлены sourcemaps для удобства разработки. В прод режиме нам нужно оптимизировать стили и подготовить для боевых условий. После компиляции SASS добавляются префиксы, группируются медиа запросы (gulp group css media queries). Далее мы сохраняем несжатый файл стилей в папку dist/css. Этот файл называется app.css и он не будет подключен к сайту. Сделано это для удобства, что бы рядом со сжатым файлом был оригинальный файл стилей. Далее мы минифицируем стили, добавляем суффикс min, сохраняем и перегружаем браузер. В итоге получим файл app.min.css, который оптимизирован и подключен к проекту. Теперь нужно немного настроить автопрефиксер, указать какие браузеры нужно поддерживать. Это можно сделать, добавив в файл package.json специальное свойство browserslist в конец файла: Добавим отслеживание изменения в файлах стиле в таске watch: Так же скорректируем таск по умолчанию: Gulp и webpack. Работа со скриптамиДля работы с js скриптами мы будем использовать webpack. Webpack — это популярный и гибкий сборщик модулей для javascript. Он умеет решать великое множество задач, как простых, так и сложных. Это полноценный и самостоятельный инструмент, с большим количеством дополнений. Но в нашей сборке мы попробуем подружить webpack и gulp. Для этого будем использовать gulp плагин webpack-stream. И так, как обычно, в файле projectСonfig.json зададим настройки путей для скриптов. Раздел src: Как видим, исходный файл находится по пути src/assets/js/app.js, а компилироваться скрипты будут в папку dist/ assets/js/. В gulpfile.js задаем массивы с путями: После этого устанавливаем нужные плагины: Рассмотрим каждый плагин: Описываем таск для работы со скриптами. Для начала создаем объект для конфигурации webpack: Здесь определяем в каком режиме работаем, включаем source maps в dev режиме и задаем исходящий файл app.js. Далее подключаем babel в прод режиме: И наконец, создаем сам таск: Здесь все подобно, как и с таском со стилями. Включаем отображение ошибок, запускаем webpack, сжимаем файл в прод режиме, добавляем суффикс min и перегружаем браузер. Добавим файлы для отслеживания в функцию watch: Далее изменяем таск по умолчанию: Создаем файл app.js. Подключаем в шаблоне _default.html файл app.min.js перед закрывающимся тегом body: На этом настройка gulp задачи для работы со скриптами закончена. Gulp imagemin. Сжатие изображенийДалее мы реализуем возможность для работы с изображениями с помощью плагина imagemin. Этот плагин предназначен для сжатия и оптимизации изображений различных форматов. Зададим настройки для путей к изображениям. В раздел src добавим: Создаем массивы настроек в gulpfile.js: Получаем такой массив: Здесь мы исключаем папку svgIcons, которая предназначена для генерации svg спрайтов. К этому мы вернемся чуть позже. Устанавливаем необходимые плагины: Рассмотрим каждый плагин: Создаем таск для сжатия изображений: Gulp webp. Конвертация изображений в webp форматДалее создадим таск, который конвертирует все изображение в webp формат. Это делается с целью оптимизации скорости загрузки сайта. Для этого установим плагин gulp-webp: Подключим этот плагин: Создаем таск для конвертации изображений в webp: В этом таске в качестве входных файлов мы берем изображения в папке dist/img, преобразовываем в webp формат и сохраняем в эту же папку. Теперь мы совместим два таска: сначала выполняем сжатие изображений, потом конвертацию и перезагружаем браузер после выполнения этих двух задач: Далее изменяем таск по умолчанию: Также установим отслеживание за изображениями в исходной папке: Gulp fonts. Работа со шрифтамиСледующая возможность, которую хотелось бы реализовать в нашей сборке — это работа со шрифтами. На сегодняшний день самыми популярными форматами шрифтов являются woff2 и woff. Именно их и нужно подключать в CSS стилях. Для начала определим пути для работы со шрифтами в файле projectСonfig.json. Раздел src: Определяем массив для настройки путей шрифтов: Очень часто возникает задача сконвертировать шрифты устаревших форматов в современные. Эта задача довольно скучная, поэтому мы автоматизируем конвертацию с помощью gulp. Именно в папке src будут сохранятся шрифты старых форматов, а преобразовывать их будем в форматы woff2 и woff и сохранять в папку с исходными шрифтами. Для начала создадим задачу, которая конвертирует шрифт ttf в woff2 и woff. Нам понадобятся два плагина: gulp-ttf2woff2 и gulp-ttf2woff. Устанавливаем их: Подключаем эти плагины: Дале описываем таски для преобразования шрифтов: Обедняем эти таски, выполнив один за одним: После этого экспортируем функцию: И так, чтобы шрифты с расширением ttf конвертировать в woff2 и woff, необходимо ввести команду: После этой команды все ttf шрифты c каталога src преобразуются в современные форматы и скопируются в папку /src/assets/fonts. Теперь реализуем конвертацию с формата otf. Для этого мы сначала преобразуем формат otf в ttf, сохраним в папку src, ну а далее, как на примере выше конвертируем в нужные форматы. Для этого понадобится плагин fonter. Устанавливаем его: Описываем таск для конвертации: Вносим изменения в значение fontsConvert: Таким образом все шрифты в формате otf и ttf преобразуются в нужные форматы. Далее создадим таск, который скопирует эти шрифты в папку dist: Отредактируем таск по умолчанию: Настроем отслеживание за файлами в папке со шрифтами: Таким образом, при изменении файлов в каталоге src/assets/fonts (либо вручную, либо в результате конвертации), запускается таск font, который скопирует шрифты в папку dist/assets/fonts. Gulp clean. Очистка папки distСоздадим простой таск, который очищает папку dist. Запускать мы его будем каждый раз при запуске нашей сборки. Для этого подключим npm плагин del: Создаем таск clean: В дефолтном таске вызываем очистку перед всеми остальными задачами: РезультатНа этом пока все. Мы разобрали основы работы с Gulp 4, рассмотрели примеры использования, создали свою сборку для верстки сайта. В дальнейших статьях мы будем ее дополнять и модифицировать. Посмотреть и скачать исходники сборки можно с репозитория. |




















