//////////////////////////////// //Setup// //////////////////////////////// // Plugins var gulp = require('gulp'), pjson = require('./package.json'), gutil = require('gulp-util'), sass = require('gulp-sass'), autoprefixer = require('gulp-autoprefixer'), cssnano = require('gulp-cssnano'), rename = require('gulp-rename'), del = require('del'), plumber = require('gulp-plumber'), pixrem = require('gulp-pixrem'), uglify = require('gulp-uglify'), imagemin = require('gulp-imagemin'), spawn = require('child_process').spawn, runSequence = require('run-sequence'), browserSync = require('browser-sync').create(), reload = browserSync.reload; // Relative paths function var pathsConfig = function (appName) { this.app = "./" + (appName || pjson.name); return { app: this.app, templates: this.app + '/templates', css: this.app + '/static/css', sass: this.app + '/static/sass', fonts: this.app + '/static/fonts', images: this.app + '/static/images', js: this.app + '/static/js', } }; var paths = pathsConfig(); //////////////////////////////// //Tasks// //////////////////////////////// // Styles autoprefixing and minification gulp.task('styles', function() { return gulp.src(paths.sass + '/*.scss') .pipe(sass().on('error', sass.logError)) .pipe(plumber()) // Checks for errors .pipe(autoprefixer({browsers: ['last 2 versions']})) // Adds vendor prefixes .pipe(pixrem()) // add fallbacks for rem units .pipe(gulp.dest(paths.css)) .pipe(rename({ suffix: '.min' })) .pipe(cssnano()) // Minifies the result .pipe(gulp.dest(paths.css)); }); // Javascript minification gulp.task('scripts', function() { return gulp.src(paths.js + '/project.js') .pipe(plumber()) // Checks for errors .pipe(uglify()) // Minifies the js .pipe(rename({ suffix: '.min' })) .pipe(gulp.dest(paths.js)); }); // Image compression gulp.task('imgCompression', function(){ return gulp.src(paths.images + '/*') .pipe(imagemin()) // Compresses PNG, JPEG, GIF and SVG images .pipe(gulp.dest(paths.images)) }); // Run django server gulp.task('runServer', function(cb) { var cmd = spawn('python', ['manage.py', 'runserver'], {stdio: 'inherit'}); cmd.on('close', function(code) { console.log('runServer exited with code ' + code); cb(code); }); }); // Browser sync server for live reload gulp.task('browserSync', function() { browserSync.init( [paths.css + "/*.css", paths.js + "*.js", paths.templates + '*.html'], { proxy: "localhost:8000" }); }); // Watch gulp.task('watch', function() { gulp.watch(paths.sass + '/*.scss', ['styles']); gulp.watch(paths.js + '/*.js', ['scripts']).on("change", reload); gulp.watch(paths.images + '/*', ['imgCompression']); gulp.watch(paths.templates + '/**/*.html').on("change", reload); }); // Default task gulp.task('default', function() { runSequence(['styles', 'scripts', 'imgCompression'], 'runServer', 'browserSync', 'watch'); });