Skip to content

Instantly share code, notes, and snippets.

@aaronallport
Last active January 3, 2016 23:49
Show Gist options
  • Save aaronallport/8537156 to your computer and use it in GitHub Desktop.
Save aaronallport/8537156 to your computer and use it in GitHub Desktop.
My first stab at a Gulp.js Gulpfile, based largely on http://markgoodyear.com/2014/01/getting-started-with-gulp/ but added some variables for a bit of configuration goodness
var gulp = require("gulp");
var sass = require("gulp-ruby-sass");
var autoprefixer = require("gulp-autoprefixer");
var minifycss = require("gulp-minify-css");
var jshint = require("gulp-jshint");
var uglify = require("gulp-uglify");
var imagemin = require("gulp-imagemin");
var rename = require("gulp-rename");
var clean = require("gulp-clean");
var concat = require("gulp-concat");
var notify = require("gulp-notify");
var cache = require("gulp-cache");
var livereload = require("gulp-livereload");
var lr = require("tiny-lr");
var server = lr();
var options = {
// SASS / CSS
SASS_SOURCE : "src/styles/main.scss",
CSS_DEST : "dist/assets/css",
// JavaScript
JS_SOURCE : "src/scripts/**/*.js",
JS_DEST : "dist/assets/js",
JS_CONCAT_TARGET : "main.js",
// Images
IMAGE_SRC : "src/images/**/*",
IMAGE_DEST : "dist/assets/img",
// Live reload
LIVE_RELOAD_PORT : 35729
};
gulp.task("styles", function() {
return gulp.src(options.SASS_SOURCE)
.pipe(sass({ style: "expanded" }))
.pipe(autoprefixer("last 2 version", "safari 5", "ie 8", "ie 9", "opera 12.1", "ios 6", "android 4"))
.pipe(gulp.dest(options.CSS_DEST))
.pipe(rename({suffix: ".min"}))
.pipe(minifycss())
.pipe(gulp.dest(options.CSS_DEST))
.pipe(livereload(server))
.pipe(notify({ message: "Styles task complete" }));
});
gulp.task("scripts", function() {
return gulp.src(options.JS_SOURCE)
.pipe(jshint(/* ".jshintrc" */))
.pipe(jshint.reporter("default"))
.pipe(concat(options.JS_CONCAT_TARGET))
.pipe(gulp.dest(options.JS_DEST))
.pipe(rename({suffix: ".min"}))
.pipe(uglify())
.pipe(gulp.dest(options.JS_DEST))
.pipe(livereload(server))
.pipe(notify({ message: "Scripts task complete" }));
});
gulp.task("images", function() {
return gulp.src(options.IMAGE_SRC)
.pipe(cache(imagemin({ optimizationLevel: 5, progressive: true, interlaced: true })))
.pipe(gulp.dest(options.IMAGE_DEST))
.pipe(livereload(server))
.pipe(notify({ message: "Images task complete" }));
});
gulp.task("clean", function() {
return gulp.src([options.CSS_DEST, options.JS_DEST, options.IMAGE_DEST], {read: false})
.pipe(clean());
});
// Register the "default" task (invoked by simply running "gulp")
gulp.task("default", ["clean"], function() {
gulp.run("styles", "scripts", "images");
});
// Watch
gulp.task("watch", function() {
// Listen on port 35729
server.listen(options.LIVE_RELOAD_PORT, function (err) {
if (err) {
return console.log(err)
};
// Watch .scss files
gulp.watch(options.SASS_SOURCE, function(event) {
console.log("File " + event.path + " was " + event.type + ", running tasks...");
gulp.run("styles");
});
// Watch .js files
gulp.watch(options.JS_SOURCE, function(event) {
console.log("File " + event.path + " was " + event.type + ", running tasks...");
gulp.run("scripts");
});
// Watch image files
gulp.watch(options.IMAGE_SRC, function(event) {
console.log("File " + event.path + " was " + event.type + ", running tasks...");
gulp.run("images");
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment