konratnox
7/12/2017 - 1:22 PM

gulp ulmart.ru

gulp ulmart.ru

'use strict';

var gulp = require('gulp'),
    rigger = require('gulp-rigger'),
    browserSync = require("browser-sync"),
    reload = browserSync.reload,
    sourcemaps = require('gulp-sourcemaps'),
    uglify = require('gulp-uglify'),
    sass = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer'),
    gcmq = require('gulp-group-css-media-queries'),
    cleanCSS = require('gulp-clean-css'),
    imagemin = require('gulp-imagemin'),
    pngquant = require('imagemin-pngquant'),
    watch =  require('gulp-watch'),
    rename = require("gulp-rename"),
    rimraf = require('rimraf');


var path = {
    build: {
        html: 'main/build/',
        js: 'main/build/js/',
        css: 'main/build/css/',
        img: 'main/build/img/',
        fonts: 'main/build/fonts/'
    },
    src: {
        html: 'main/src/*.html', //Синтаксис src/*.html говорит gulp что мы хотим взять все файлы с расширением .html
        js: 'main/src/js/main.js', //В стилях и скриптах нам понадобятся только main файлы
        style: 'main/src/style/main.scss',
        css: 'main/src/style/*.css',
        img: 'main/src/img/**/*.*', //Синтаксис img/**/*.* означает - взять все файлы всех расширений из папки и из вложенных каталогов
        fonts: 'main/src/fonts/**/*.*',
        js_external: 'main/src/js_external/**/*.js'
    },
    watch: { //Тут мы укажем, за изменением каких файлов мы хотим наблюдать
        html: 'main/src/**/*.html',
        js: 'main/src/js/**/*.js',
        style: 'main/src/style/**/*.scss',
        css: 'main/src/style/*.css',
        img: 'main/src/img/**/*.*',
        fonts: 'main/src/fonts/**/*.*',
        js_external: 'main/src/js_external/**/*.js'
    },
    clean: './main/build'
};
var config = {
    server: {
        baseDir: "./main/build"
    },
    tunnel: false,
    host: 'localhost',
    port: 9000,
    logPrefix: "Frontend_Devil"
};

gulp.task('html:build', function () {
    gulp.src(path.src.html) //Выберем файлы по нужному пути
        .pipe(rigger()) //Прогоним через rigger
        .pipe(gulp.dest(path.build.html)) //Выплюнем их в папку build
        .pipe(reload({stream: true})); //И перезагрузим наш сервер для обновлений
});

gulp.task('js:build', function () {
    gulp.src(path.src.js) //Найдем наш main файл
        .pipe(rigger()) //Прогоним через rigger
        .pipe(gulp.dest(path.build.js)) //Выплюнем готовый файл в build
        .pipe(sourcemaps.init()) //Инициализируем sourcemap
        .pipe(uglify()) //Сожмем наш js
        .pipe(rename({suffix: ".min"}))
        .pipe(sourcemaps.write('.')) //Пропишем карты
        .pipe(gulp.dest(path.build.js)) //Выплюнем готовый файл в build
        .pipe(reload({stream: true})); //И перезагрузим сервер
});


gulp.task('style:build', function () {
    gulp.src(path.src.style) //Выберем наш main.scss
        .pipe(sourcemaps.init()) //То же самое что и с js
        .pipe(sass()) //Скомпилируем
        .pipe(autoprefixer()) //Добавим вендорные префиксы
        .pipe(gcmq())
        .pipe(cleanCSS())
        .pipe(sourcemaps.write('.')) //Пропишем карты
        .pipe(gulp.dest(path.build.css)) //И в build
        .pipe(reload({stream: true}));
});

gulp.task('image:build', function () {
    gulp.src(path.src.img) //Выберем наши картинки
        .pipe(imagemin({ //Сожмем их
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()],
            interlaced: true
        }))
        .pipe(gulp.dest(path.build.img)) //И бросим в build
        .pipe(reload({stream: true}));
});

gulp.task('fonts:build', function() {
    gulp.src(path.src.fonts)
        .pipe(gulp.dest(path.build.fonts))
});

gulp.task('js_external:build', function () {
    gulp.src(path.src.js_external)
        .pipe(uglify())
        .pipe(gulp.dest(path.build.js))
});

gulp.task('css:build', function() {
    gulp.src(path.src.css)
        .pipe(cleanCSS())
        .pipe(gulp.dest(path.build.css))
});

gulp.task('build', [
    'html:build',
    'js:build',
    'style:build',
    'fonts:build',
    'image:build'
]);

gulp.task('watch', function(){
    watch([path.watch.html], function(event, cb) {
        gulp.start('html:build');
    });
    watch([path.watch.style], function(event, cb) {
        gulp.start('style:build');
    });
    watch([path.watch.js], function(event, cb) {
        gulp.start('js:build');
    });
    watch([path.watch.img], function(event, cb) {
        gulp.start('image:build');
    });
    watch([path.watch.fonts], function(event, cb) {
        gulp.start('fonts:build');
    });
    watch([path.watch.js_external], function(event, cb) {
        gulp.start('js_external:build');
    });
    watch([path.watch.css], function(event, cb) {
        gulp.start('css:build');
    });
});

gulp.task('webserver', function () {
    browserSync(config);
});

gulp.task('clean', function (cb) {
    rimraf(path.clean, cb);
});

gulp.task('default', ['build', 'webserver', 'watch']);
{
  "name": "ulmart.ru",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "browser-sync": "^2.18.8",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^3.1.1",
    "gulp-clean-css": "^3.0.4",
    "gulp-group-css-media-queries": "^1.2.0",
    "gulp-imagemin": "^3.2.0",
    "gulp-rename": "^1.2.2",
    "gulp-rigger": "^0.5.8",
    "gulp-sass": "^3.1.0",
    "gulp-sourcemaps": "^2.5.0",
    "gulp-uglify": "^2.1.2",
    "gulp-watch": "^4.3.11",
    "rimraf": "^2.6.1"
  },
  "dependencies": {
    "imagemin-pngquant": "^5.0.0"
  }
}