gulpfile.js
/* Gulp set up --------------------------------------------------------------------------------- */ const gulp = require('gulp'); // load all plugins with prefix 'gulp'const $ = require('gulp-load-plugins')(); const connect = require('gulp-connect-php');const sequence = require('run-sequence'); const _ = require('./assets/build')(gulp); /* Task: Compile SCSS --------------------------------------------------------------------------------- */ gulp.task('build:styles', ['lint:styles'], () => { _.conf.sass.includePaths = _.depsPath; const styles = gulp.src(_.paths.styles, {base: _.paths.src}) .pipe($.sass(_.conf.sass).on('error', $.sass.logError)) .pipe($.autoprefixer(_.conf.autoprefixer)) .pipe($.cleanCss()) .on('error', _.logErrors); return _.build(styles);}); /* Task: Minify JS --------------------------------------------------------------------------------- */ gulp.task('build:scripts', ['lint:scripts'], () => { const scripts = gulp.src(_.paths.scripts, {base: _.paths.src}) .pipe($.babel({presets: ['es2015']})) .on('error', _.logErrors) .pipe($.uglify(_.conf.uglify)) .on('error', _.logErrors); return _.build(scripts);}); /* Task: Optimize image --------------------------------------------------------------------------------- */ gulp.task('build:images', () => { const images = gulp.src(_.paths.images, {base: _.paths.src}) .pipe($.changed(_.paths.dest)) .pipe($.imagemin(_.conf.imagemin)) .on('error', _.logErrors); return _.build(images);}); /* Task: Optimize image --------------------------------------------------------------------------------- */ gulp.task('build:fonts', (done) => { const path = require('path'); gulp.src(_.paths.fonts, {base: _.paths.src}) .pipe(gulp.dest((file) => { file.path = file.base + path.basename(file.path); return _.paths.dest + 'fonts/'; })); return done();}); /* Task: Lint SCSS --------------------------------------------------------------------------------- */ gulp.task('lint:styles', () => { _.conf.sass.includePaths = _.depsPath; Similar blocks of code found in 2 locations. Consider refactoring. return gulp.src(_.paths.styles, {base: _.paths.src}) .pipe($.sassLint(_.conf.sasslint)) .pipe($.sassLint.format()) .pipe($.sassLint.failOnError());}); /* Task: Lint JS --------------------------------------------------------------------------------- */ gulp.task('lint:scripts', () => {Similar blocks of code found in 2 locations. Consider refactoring. return gulp.src(_.paths.scripts, {base: _.paths.src}) .pipe($.eslint(_.conf.eslint)) .pipe($.eslint.format()) .pipe($.eslint.failOnError());}); /* Task: Vendor --------------------------------------------------------------------------------- */ gulp.task('vendor:copy', ['modernizr'], () => { return gulp.src(_.vendors) .pipe(gulp.dest(_.paths.vendor));}); /* Task: Minify Vendor scripts --------------------------------------------------------------------------------- */ gulp.task('vendor:scripts', () => { return gulp.src(_.paths.vendor + '/**/*.js') .pipe($.uglify(_.conf.uglify)) .on('error', _.logErrors) .pipe(gulp.dest(_.paths.vendor));}); /* Task: Minify Vendor scripts --------------------------------------------------------------------------------- */ gulp.task('vendor:styles', () => { return gulp.src(_.paths.vendor + '/**/*.css') .pipe($.cleanCss()) .on('error', _.logErrors) .pipe(gulp.dest(_.paths.vendor));}); /* Task: Modernizr --------------------------------------------------------------------------------- */ gulp.task('modernizr', () => { const conf = _.conf.modernizr; return gulp.src(_.paths.src + '**/*.{js,scss}') .pipe($.modernizr(conf.filename, conf.settings)) .pipe(gulp.dest(_.paths.vendor));}); /* Task: Serve --------------------------------------------------------------------------------- */ gulp.task('serve', () => { if (_.isLocal) { return connect.server(_.server, _.sync); } return _.sync();}); /* Task: Watch --------------------------------------------------------------------------------- */ gulp.task('watch', ['serve'], (done) => { // SCSS & Minify gulp.watch(_.paths.styles, ['build:styles']); // ES2015 & Uglify gulp.watch(_.paths.scripts, ['build:scripts']); // Imagemin gulp.watch(_.paths.images, ['build:images']); // Reload gulp.watch(_.conf.patterns.server) .on('change', _.bSync.reload); // Done return done();}); /* Task: Test Behaviour --------------------------------------------------------------------------------- */ gulp.task('test:bdd', (done) => { gulp.src('./tests/webdriver.js') .pipe($.webdriver(_.wdio)); return done();}); /* Task: Deploy Wiki Pages --------------------------------------------------------------------------------- */ gulp.task('deploy:wiki', (done) => { const exec = require('child_process').exec; const ghUser = !_.isLocal && 'GH_USER_TOKEN' in process.env ? process.env.GH_USER_TOKEN : 'git'; let command = [ 'git subtree push -P docs/wiki', ghUser + '@github.com:projek-xyz/slim-skeleton.wiki.git', 'master' ]; exec(command.join(' '), (err, stdout, stderr) => { _.log(stdout); _.log(stderr, 'red'); done(err); });}); /* Task: Clean --------------------------------------------------------------------------------- */ gulp.task('clean', () => { const del = require('del'); return del([_.paths.dest, _.paths.vendor]).then(() => { _.log('Assets directory cleaned', 'green'); });}); /* Task: Vendor --------------------------------------------------------------------------------- */ gulp.task('vendor', (done) => { sequence('vendor:copy', 'vendor:scripts', 'vendor:styles', done);}); /* Task: Build --------------------------------------------------------------------------------- */ gulp.task('build', (done) => { sequence('build:styles', 'build:scripts', 'build:images', 'build:fonts', done);}); /* Task: Lint --------------------------------------------------------------------------------- */ gulp.task('lint', ['lint:styles', 'lint:scripts']); /* Task: Default --------------------------------------------------------------------------------- */ gulp.task('default', (done) => { sequence('clean', 'build', 'vendor', done);});