Сборка проекта с помощью GULP

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

Что такое Gulp

Gulp vs Grunt

"Gulp is a streaming build system".

Think Grunt, but faster and less config.

  • Focus on configuration
  • Focus on code
  • Stream based
  • File based
  • Plugins are designed to do one thing only
  • Plugins often perform multiple tasks
  • Uses leaner, simpler JavaScript code
  • Uses JSON-like data configuration files

.less

.less

.less

.css

.min.css

.less

.less

.min.css

concat()

less()

minify()

rename()

PIPE

1. Установка

Install Node

npm install -g gulp 

Install Gulp

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

2. Настройка package.json

$ npm init

package.json

Создаем новый node проект

{
  "name": "project-name",
  "version": "1.0.0",
  ...
}
$ npm install --save-dev gulp
{
  "name": "project-name",
  "version": "1.0.0",
  ...
  "devDependencies": {
    "gulp": "^3.9.0"
  }
}

package.json

Добавляем gulp в проект

3. Создаем gulpfile.js

$ touch gulpfile.js
var gulp = require('gulp');

gulpfile.js

Создаем gulpfile.js

4. Gulp tasks

var gulp = require('gulp');

gulp.task('taskName1', function(){

  ...

});

gulp.task('default', ['taskName1', 'taskName2']);

gulpfile.js

$ gulp taskName1

Run task

Резюме

1. Установка

2. Натсройка package.json

3. Создаем gulpfile.js

4. Gulp tasks

3 основных понятия:

1. Плагины (Plugins)

2. Потоки (Streams)

3. Задачи (Tasks)

Ядро функциональности Gulp

Связь между задачами

Место, чтобы взаимодействовать с помощью плагинов

Gulp API

gulp.task('taskName', [dependencies],  function(done){

  ...

});

gulp.task

gulp.task('default', ['taskName1', 'taskName2']);
gulp.src(['source/styles/*.css', '...'])

gulp.src

gulp.src(['...', 'build/styles/*.css'])

gulp.dest

gulp.src('source/styles/*.css')
    .pipe(gulp.dest('build/styles/'));
gulp.watch('source/styles/*.css', ['taskName']);

gulp.watch

Популярные Плагины и задачи

var gulp = require('gulp');
var concat = require('gulp-concat');


gulp.task('css', function(){
  gulp.src('source/styles/*.css')
    .pipe(concat('style.css'))
    .pipe(gulp.dest('build/styles/'));
});

Concat files

$ npm install --save-dev gulp-concat

gulpfile.js

var gulp = require('gulp');
var less = require('gulp-less');


gulp.task('css', function(){
  gulp.src('source/styles/*.less')
    .pipe(less())
    .pipe(gulp.dest('build/styles/'));
});

Compile less files

$ npm install --save-dev gulp-less

gulpfile.js

var gulp = require('gulp');
var uglify = require('gulp-uglify');


gulp.task('js', function(){
  gulp.src('source/js/*.js')
    .pipe(uglify())
    .pipe(gulp.dest('build/js/'));
});

Minify Javascript

npm install --save-dev gulp-uglify

gulpfile.js

var gulp = require('gulp');
var minify = require('gulp-minify-css');


gulp.task('css', function(){
  gulp.src('source/styles/*.less')
    .pipe(minify({ keepBreaks: true }))
    .pipe(gulp.dest('build/styles/'));
});

Minify CSS

npm install --save-dev gulp-minify-css

gulpfile.js

var gulp = require('gulp');
var rename = require('gulp-rename');


gulp.task('css', function(){
  gulp.src('source/styles/*.less')
    .pipe(minify({ keepBreaks: true }))
    .pipe(rename({ suffix: '.min' }))
    .pipe(gulp.dest('build/styles/'));
});

Rename

npm install --save-dev gulp-rename

gulpfile.js

var gulp        = require("gulp");
var sass        = require("gulp-sass");
var browserSync = require("browser-sync").create();

// Static Server + watching scss/html files
gulp.task('serve', ['sass'], function() {

    browserSync.init({
        server: "./app"
    });

    gulp.watch("app/scss/*.scss", ['sass']);
    gulp.watch("app/*.html").on('change', browserSync.reload);
});

Browser-sync

npm install browser-sync --save-dev

gulpfile.js

gulp.task('watch', function(){
  gulp.watch(['source/styles/components/*.css'], ['css']);
  gulp.watch(['source/styles/*.less'], ['less']);
  gulp.watch(['source/js/*.js'], ['js']);
  gulp.watch(['source/*.html'], ['html']);
  gulp.watch(['source/img/**/*'], ['images']);
  gulp.watch(['source/fonts/**/*'], ['fonts']);
});

gulp.task('build', ['css', 'less', 'js', 'html', 'images','fonts', 'watch']);

Watch

gulpfile.js

Grunt требует плагин для этого; Gulp имеет встроенный.

http://gulpjs.com/plugins/

Как запустить Gulp?

var gulp = require('gulp');

...

gulp.task('default', ['css', 'less', 'js', 'html', 'images','fonts', 'watch']);

gulpfile.js

$ gulp

command line

var gulp = require('gulp');

...

gulp.task('myGulp', ['css', 'less', 'js', 'html', 'images','fonts', 'watch']);

gulpfile.js

$ gulp myGulp

command line

Резюме

1. Установка (Node & Gulp)

2. Настройка и старт проекта

3. Создаем задачи (tasks)

4. 3 основных поянтия

5. Gulp API & plugins

Plugins

Streams

Tasks

gulp.thank(you)

FRONT-END WORKFLOW WITH GULP

By Alexey Kalyuzhnyi

FRONT-END WORKFLOW WITH GULP

FRONT-END WORKFLOW WITH GULP

  • 2,526