kiberlain
3/25/2017 - 4:15 AM

#gulp

#gulp

'use strict';

import gulp from 'gulp';
import plumber from 'gulp-plumber';
import stylus from 'gulp-stylus';
import cssnano from 'gulp-cssnano';
import gcmq from 'gulp-group-css-media-queries';
import sourcemaps from 'gulp-sourcemaps';
import jeet from 'jeet';
import rupture from 'rupture';
import koutoSwiss from 'kouto-swiss';
import prefixer from 'autoprefixer-stylus';
import concat from 'gulp-concat';
import uglify from 'gulp-uglify';
import babel from 'gulp-babel';
import jade from 'gulp-jade';
import imagemin from 'gulp-imagemin';
import browserSync from 'browser-sync';
import ghPages from 'gulp-gh-pages';

const srcPaths = {
    js: 'src/js/**/*.js',
    css: 'src/styl/**/*.styl',
    mainStyl: 'src/styl/main.styl',
    jade: 'src/templates/*.jade',
    img: 'src/img/**/*',
    fonts: 'src/fonts/**/*'
};

const buildPaths = {
    build: 'build/**/*',
    js: 'build/assets/js/',
    css: 'build/assets/css/',
    jade: 'build/',
    img: 'build/assets/img',
    fonts: 'build/assets/fonts'
};

gulp.task('css', () => {
    gulp.src(srcPaths.mainStyl)
        .pipe(sourcemaps.init())
        .pipe(stylus({
            use: [koutoSwiss(), prefixer(), jeet(), rupture()],
            compress: true
        }))
        .pipe(gcmq())
        .pipe(cssnano()) 
        .pipe(sourcemaps.write())
        .pipe(gulp.dest(buildPaths.css));
});

gulp.task('images', () => {
    gulp.src(srcPaths.img)
        .pipe(plumber())
        .pipe(imagemin({
            optimizationLevel: 3,
            progressive: true,
            interlaced: true
        }))
        .pipe(gulp.dest(buildPaths.img));
});


gulp.task('js', () => {
    gulp.src(srcPaths.js)
        .pipe(plumber())
        .pipe(concat('main.js'))
        .pipe(babel({
            presets: ['es2015']
        }))
        .pipe(uglify())
        .pipe(gulp.dest(buildPaths.js));
});

gulp.task('jade', () => {
    gulp.src(srcPaths.jade)
        .pipe(plumber())
        .pipe(jade())
        .pipe(gulp.dest(buildPaths.jade));
});

gulp.task('images', () => {
    gulp.src(srcPaths.img)
        .pipe(plumber())
        .pipe(imagemin({
            optimizationLevel: 3,
            progressive: true,
            interlaced: true
        }))
        .pipe(gulp.dest(buildPaths.img));
});

gulp.task('fonts', () => {
    gulp.src(srcPaths.fonts)
        .pipe(plumber())
        .pipe(gulp.dest(buildPaths.fonts));
});

gulp.task('watch', () => {
    gulp.watch(srcPaths.jade, ['jade']);
    gulp.watch(srcPaths.css, ['css']);
    gulp.watch(srcPaths.js, ['js']);
    gulp.watch(srcPaths.img, ['images']);
    gulp.watch(srcPaths.fonts, ['fonts']);
});

gulp.task('browser-sync', () => {
    var files = [
        buildPaths.build
    ];

    browserSync.init(files, {
        server: {
            baseDir: './build/'
        },
    });
});

gulp.task('pages', () => {
    gulp.src(buildPaths.build)
        .pipe(ghPages());
});

gulp.task('default', ['css', 'jade', 'js', 'images', 'fonts', 'watch', 'browser-sync']);
gulp.task('deploy', ['css', 'jade', 'js', 'images', 'fonts', 'pages']);