gulpfile.js 4.61 KB
var gulp = require('gulp');
var sass = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
var plumber = require('gulp-plumber');
var mustache = require('gulp-mustache');
var beautify = require('gulp-html-beautify');
var server = require('gulp-server-livereload');
var jshint = require('gulp-jshint');
var minify = require('gulp-minify');
var image = require('gulp-image');
const autoprefixer = require('gulp-autoprefixer');


/********************************************************************
 *
 *
 *
 *           WATCH / DEV
 *
 *
 *
 **/

// Gulp Sass Task

gulp.task('sass', function() {
    return    gulp.src('./src/scss/{,*/}*.{scss,sass}')
        .pipe(plumber())
        .pipe(sourcemaps.init())
        .pipe(sass({ style: 'expanded' }))
        .pipe(autoprefixer('last 2 version'))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('css'))
        .pipe(gulp.dest('./dev/css'))
 });



// Compile mustache files and beautify them
gulp.task('mustache', function () {
    gulp.src('./src/*.html')
        .pipe(plumber())
        .pipe(mustache('data.json'))
        .pipe(beautify({indent_size: 2, end_with_newline: true}))
        .pipe(gulp.dest('./dev'));
});

// manage img optimize for production

gulp.task('image', function () {
    gulp.src('./src/img/*')
        .pipe(image({
            pngquant: true,
            optipng: false,
            zopflipng: true,
            jpegRecompress: false,
            jpegoptim: true,
            mozjpeg: true,
            guetzli: false,
            gifsicle: true,
            svgo: true,
            concurrent: 10
        }))
        .pipe(gulp.dest('./dev/img'));
});

gulp.task('default', ['image']);


// FONT
gulp.task('fonts', function () {
    gulp.src('./src/fonts/*')
        .pipe(gulp.dest('./dev/fonts'));
});



// Manage Javascript
gulp.task('js', function () {
    gulp.src('./src/js/*.js')
        .pipe(minify({
            ext: {
                src: '-debug.js',
                min: '.js'
            },
            exclude: ['tasks'],
            ignoreFiles: ['.combo.js', '-min.js']
        }))
        .pipe(gulp.dest("./dev/js"));
});

// Livereload
gulp.task('serve', function () {
    gulp.src('./dev')
        .pipe(server({
            livereload: true,
            directoryListing: false,
            open: true
        }));
});


// Create Gulp Default Task and serve on DEV

gulp.task('default', ['sass', 'mustache', 'image', 'js','fonts', 'serve'], function () {
    gulp.watch('./src/scss/{,*/}*.{scss,sass}', ['sass']);
    gulp.watch('./src/partials/**/*.html', ['mustache']);
    gulp.watch('./src/*.html', ['mustache']);
    gulp.watch('./src/js/*.js', ['js']);
    gulp.watch('./src/img/*', ['image']);
});





/**********************************************************************
 *
 *
 *
 *           BUILD
 *
 *
 *
 **/
// Gulp Sass Task
gulp.task('sass-build', function () {
    gulp.src('./src/scss/{,*/}*.{scss,sass}')
        .pipe(plumber())
        .pipe(sourcemaps.init())
        .pipe(sass({ style: 'expanded' }))
        .pipe(autoprefixer('last 2 version'))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('css'))
        .pipe(gulp.dest('./build/css'))
});

// Compile mustache files and beautify them
gulp.task('mustache-build', function () {
    gulp.src('./src/*.html')
        .pipe(plumber())
        .pipe(mustache('data.json'))
        .pipe(beautify({indent_size: 2, end_with_newline: true}))
        .pipe(gulp.dest('./build'));
});

// manage img optimize
gulp.task('image-build', function () {
    gulp.src('./src/img/*')
        .pipe(image({
            pngquant: true,
            optipng: false,
            zopflipng: true,
            jpegRecompress: false,
            jpegoptim: true,
            mozjpeg: true,
            guetzli: false,
            gifsicle: true,
            svgo: true,
            concurrent: 10
        }))
        .pipe(gulp.dest('./build/img'));
});

// Manage Javascript
gulp.task('js-build', function () {
    gulp.src('./src/js/*.js')
        .pipe(minify({
            ext: {
                src: '-debug.js',
                min: '.js'
            },
            exclude: ['tasks'],
            ignoreFiles: ['.combo.js', '-min.js']
        }))
        .pipe(gulp.dest("./build/js"));
});

// FONT
gulp.task('fonts-build', function () {
    gulp.src('./src/fonts/*')
        .pipe(gulp.dest('./build/fonts'));
});

// Build tools
gulp.task('build', ['sass-build', 'mustache-build', 'js-build', 'image-build', 'fonts-build']);