var gulp = require('gulp'); var sass = require('gulp-sass'); var autoprefixer = require('gulp-autoprefixer'); var sourcemaps = require('gulp-sourcemaps'); var browserSync = require('browser-sync'); var useref = require('gulp-useref'); var uglify = require('gulp-uglify'); var gulpIf = require('gulp-if'); var cssnano = require('gulp-cssnano'); var imagemin = require('gulp-imagemin'); var cache = require('gulp-cache'); var del = require('del'); var runSequence = require('run-sequence'); const gulpStylelint = require('gulp-stylelint'); // Development Tasks // ----------------- // Start browserSync server gulp.task('browserSync', function () { browserSync({ server: { baseDir: '' } }) }) gulp.task('sass', function () { return gulp.src('src/scss/**/*.scss') // Gets all files ending with .scss in app/scss and children dirs .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) // Passes it through a gulp-sass, log errors to console .pipe(autoprefixer({ browsers: ['last 2 versions'], cascade: false })) .pipe(cssnano()) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist/css')) // Outputs it in the css folder .pipe(browserSync.reload({ // Reloading with Browser Sync stream: true })); }) gulp.task('lint-css', function lintCssTask() { return gulp.src('src/scss/**/*.scss') .pipe(gulpStylelint({ reporters: [ { formatter: 'string', console: true } ] })); }); // Watchers gulp.task('watch', function () { gulp.watch('src/scss/**/*.scss', ['lint-css', 'sass']); gulp.watch('index.html', browserSync.reload); gulp.watch('src/js/**/*.js', browserSync.reload); }) // Optimization Tasks // ------------------ // Optimizing CSS and JavaScript gulp.task('useref', function () { return gulp.src('src/*.html') .pipe(useref()) .pipe(gulpIf('*.js', uglify())) .pipe(gulpIf('*.css', cssnano())) .pipe(gulp.dest('dist')); }); // Optimizing Images gulp.task('images', function () { return gulp.src('src/images/**/*.+(png|jpg|jpeg|gif|svg)') // Caching images that ran through imagemin .pipe(cache(imagemin({ interlaced: true, }))) .pipe(gulp.dest('dist/images')) }); // Copying fonts gulp.task('fonts', function () { return gulp.src('src/fonts/**/*') .pipe(gulp.dest('dist/fonts')) }) // Cleaning gulp.task('clean', function () { return del.sync('dist').then(function (cb) { return cache.clearAll(cb); }); }) gulp.task('clean:dist', function () { return del.sync(['dist/**/*', '!dist/images', '!dist/images/**/*']); }); // Build Sequences // --------------- gulp.task('default', function (callback) { runSequence(['sass', 'browserSync'], 'watch', callback ) }) gulp.task('build', function (callback) { runSequence( 'clean:dist', 'sass', ['useref', 'images', 'fonts'], callback ) })