Что такое Gulp: инструкция по работе с Gulp

Антон Тимин
Антон Тимин PHP программист
18.04.2018

В команде Alto проводят еженедельные обучения для программистов. В этот раз мы разбирались с инструментом для автоматизации повторяющихся задач — Gulp. Рассмотрели что такое Gulp, зачем он нужен и как с ним работать.

Что такое Gulp

Gulp - это инструмент для автоматизации задач разработки веб-сайтов. Он позволяет разработчикам создавать и выполнять задачи, такие как компиляция Sass в CSS, сжатие изображений и объединение JavaScript файлов, автоматическое обновление браузера при изменении файлов и т.д. Если вы часто сталкиваетесь с компиляцией Sass/Less в CCS, минификацией, конкатенацией файлов css/js, обработкой изображений и далее по списку, то наверняка слышали о Gulp. Или использовали аналогичные инструменты, вроде Grunt.

Gulp имеет множество плагинов, которые могут быть использованы для выполнения различных задач. Плагины могут быть установлены через пакетный менеджер npm и подключены к файлу "gulpfile.js".

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

Какие задачи решает Gulp

Gulp — это инструмент для автоматизации задач веб-разработки. Он может использоваться для выполнения различных задач, таких как:

  1. Работа с Javascript, HTML и CSS-файлами - минимизация и конкатенация отдельных файлов в один;
  2. Использование CSS препроцессоров Sass, Less, Stylus, Jade и т.д.;
  3. Работа с изображениями - оптимизация и сжатие;
  4. Автоматическая простановка вендорных префиксов для CSS;
  5. Удаление неиспользуемого CSS (UnCSS);
  6. Валидация кода и его тестирование.

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

Инструкция по работе с Gulp

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

Для работы с Gulp нужно установить Node.js. Скачать его можно по ссылке: https://nodejs.org/en/download/.

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

Node.js является независимой платформой и может работать на различных операционных системах, таких как Windows, macOS и Linux.

Установка Gulp глобально

После того как установили Node.js. Откройте командную строку и введите команду:

npm i gulp -g

npm install – это команда, которую использует Node Package Manager для установки Gulp на компьютер.

Флаг -g указывает, что Gulp надо установить на компьютер глобально, для использования в любом месте системы.

Создание проекта

Команда npm init создает файл package.json, который содержит информацию о проекте (описание проекта и зависимости).

npm init

Чтобы добавить gulp в новый проект для разработки, пишем:

npm install gulp-watch --save-dev

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

npm install

Для выполнения каждой задачи в gulp есть свой плагин. Установить основные плагины для разработки вы можете по ссылке: http://gulpjs.com/plugins/

Нам понадобятся:

npm install gulp-watch --save-dev
npm install gulp-sass --save-dev
npm install gulp-rigger --save-dev
npm install gulp-rename --save-dev
npm install gulp-imagemin --save-dev
npm install imagemin-pngquant --save-dev
npm install imagemin-jpegoptim --save-dev
npm install imagemin-mozjpeg --save-dev
npm install gulp-autoprefixer --save-dev
npm install gulp-uglify --save-dev
npm install gulp-cssnano --save-dev
npm install gulp-util --save-dev
npm install gulp-cache --save-dev

Основные понятия Gulp

gulpfile.js

Файл gulpfile.js находится в корне папки проекта. Он содержит все инструкции - какие модули используются, какие задачи выполняются. В начале файла подключается сам Gulp и его модули, которые будут использованы:

var
    gulp = require('gulp'),
    watch = require('gulp-watch'),
    sass = require('gulp-sass'),
    rigger = require('gulp-rigger'),
    rename = require('gulp-rename'),
    imagemin = require('gulp-imagemin'),
    pngquant = require('imagemin-pngquant'),
    jpegoptim = require('imagemin-jpegoptim'),
    mozjpeg = require('imagemin-mozjpeg'),
    autoprefixer = require('gulp-autoprefixer'),
    uglify = require('gulp-uglify'),
    svgmin = require('gulp-svgmin'),
    cssnano = require('gulp-cssnano'),
    gutil = require('gulp-util'),
    cache = require('gulp-cache');

Task

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

gulp.task('mytask', function(){
    // код функции
   console.log('Hello world!');
});

Task вызывается из консоли как

gulp mytask

Выборка файлов для обработки  - gulp.src

Он служит для выборки файлов, над которыми будет выполняться task:

gulp.src( path_to_files )

Для обработки всех jpg из папки src/img

gulp.src( 'src/img/*.jpg')

Для обработки всех jpg из папки src/img, включая подпапки

gulp.src( 'src/img/**/*.jpg')

Для обработки всех jpg и png из папки src/img включая подпапки

gulp.src( 'src/img/**/*.+(png|jpg)')

Можно задавать несколько условий выборки файлов в виде массива.

gulp.src(['src/js/*.js', 'src/another_js/*.js'])

Можно задавать исключения, используя “!”. Обработка всех файлов js из папки src/js кроме файла src/js/js.js

gulp.src(['src/js/*.js', '!src/js/js.js'])

Вызов плагина для обработки - .pipe()

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

pipe( plugin() )

Для последовательной обработки файла несколькими плагинами pipe соединяются в цепочку

pipe( plugin1() ).pipe( plugin2() ).pipe( plugin3() )

Вывод результата - gulp.dest

gulp.dest( path_to_files )

path_to_files - это папка, в которую надо сохранить результат обработки. Например:

gulp.dest('www/js/')

Описание Task

gulp.task('mytask', function(){
    return gulp.src('src/js/*.js')       // выборка js-файлов из src/js/
    .pipe(uglify())                      // минификация js плагином uglify
    .pipe(rename({suffix: '.min'}))      // добавление суффикса .min
    .pipe(gulp.dest('www/js/'));        // сохранение в www/js/
});

Watch

Позволяет отслеживать изменения файлов и запускать соответствующие таски gulp.watch( path_to_files, [‘task_name’] ); path_to_files - файлы, за которыми следим [‘task_name’] - массив с названиями тасков, которые надо запускать при изменении файлов.

Пример:

gulp.watch('src/js/**/*.js', ['js']);

Start

Выполняет запуск задачи

gulp.start('task_name');

Основные задачи и плагины

CSS и препроцессоры

  • С помощью плагина gulp-sass - мы можем компилировать SCSS в CSS.
  • gulp-less - компилирует LESS в CSS.
  • gulp-autoprefixer - добавляет префиксы браузеров для нестандартных CSS свойств.
  • Плагин gulp-cssnano - минифицирует все.

Пример таска

gulp.task('scss', function(){
    return gulp.src('src/scss/*.scss')
    .pipe(sass().on('error', gutil.log))
    .pipe(autoprefixer({
        browsers: ['since 2011'],
        cascade: false
    }))
    .pipe(gulp.dest('www/files/css'))
    .pipe(cssnano())
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest('www/files/css'));
});

При работе с JS

Используем плагин gulp-uglify.

Пример:

gulp.task('js', function(){
    return gulp.src('src/js/*.js')
    .pipe(uglify())
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest('www/files/js/'));
});

Сжатие изображений

Используем плагины:

  • для png - imagemin-pngquant

Пример:

.pipe( imagemin([ pngquant({quality: 90}) ],{verbose:true}) )
  • для jpg - imagemin-jpegoptim, imagemin-mozjpeg

Пример:

.pipe( imagemin([ mozjpeg({quality: 85}) ],{verbose:true}) )

Включение кода другого файла gulp-rigger 

Работает любом файле - js, css, scss. Он удобен для сборки в один файл, если нужно учитывать порядок включения файлов.

//= folder/file.js

В дальнейшем заменяется на код файла.

gulp-cache

Обеспечивает кэширование результатов обработки файлов.

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

.pipe( cache( plugin() ) )

Пример:

gulp.task('jpeg', function(){
    return gulp.src('src/img/**/*.jpg')
    .pipe(
        cache(
        imagemin([ mozjpeg({quality: 85}) ],{verbose:true})
        )
    )
    .pipe(gulp.dest('www/files/img'));
});

Обработка ошибок

Если в процессе обработки файла возникает ошибка, то весь таск прерывается. Дальнейшие файлы не обрабатываются.

Если таск был запущен через watch и запустился после изменения файла, то при ошибке в нем будет прервано и дальнейшее наблюдение за файлами. Чтобы такого не происходило надо отлавливать ошибки. Это делает плагин gulp-util. Его надо подключить в начале gulpfile.js.

var gutil = require('gulp-util');

Добавить к каждому плагину, у которого возможна ошибка:

.on('error', gutil.log)

Ошибка будет выведена в консоль, но наблюдение и обработка файлов продолжится.

Пример:

gulp.task('js', function(){
    gulp.src('src/js/*.js')
    .pipe(rigger().on('error', gutil.log))
    .pipe(gulp.dest('www/files/js/'));
});

Заключение

Надеемся, что вам удалось применить Gulp в своей работе. Gulp действительно является мощным инструментом при сборке проектов и web-приложений. Он позволяет автоматизировать многие рутинные задачи, такие как компиляция Sass в CSS, сжатие и оптимизация изображений, сборка и минификация JavaScript-файлов, сборка HTML-шаблонов и многое другое. Благодаря Gulp, разработчики компании Alto значительно ускоряют свой рабочий процесс и снижают вероятность ошибок, связанных с ручной обработкой файлов.

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

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

Читайте далее
Разработка
Как провести нагрузочное тестирование: по шагам на примере сайта Alto
Как провести нагрузочное тестирование сайта
Разработка
Как провести автоматическое тестирование сайта: кейсы, что нужно
Как провести автоматическое тестирование сайта
Разработка
Настраиваем web-сервера, nginx и apache на одном сервере
Настраиваем веб-сервер — nginx и apache на одном сервере
Разработка
Инструкция по работе с Gulp: установка, создание проекта, основные команды
Что такое Gulp: инструкция по работе с Gulp
Разработка
Подключение JS в Bitrix: все способы в системе управления 1С-Битрикс
Как подключить JS в Bitrix
Разработка
Резервное копирование и восстановление сайта на 1С-Битрикс: все способы восстановления и создания бэкапа
Резервное копирование и восстановление сайта на 1С-Битрикс
Разработка
Как перенести сайта Битрикс на другой хостинг: пошаговая инструкция
Перенос сайта Битрикс на другой хостинг
Разработка
Как добавить пиксель на сайт своими руками в 2022 году?
Как добавить пиксель на сайт
Разработка
Кэширование данных в Bitrix: настройка, как это работает, что это такое
Кэширование данных в Bitrix
Разработка
Cron в Битриксе - функционал Агентов для регулярных задач
Cron в Битриксе