-
-
Save tdaubs/3be05f1029aed726a626 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# How to set up Gulp with an ExpressionEngine project | |
I freaking love working with technologies like Grunt and Gulp, and wanted to share how to get my current EE front-end workflow set up. With a few tweaks, this can also be used with virtually any other sites (I've used it with Laravel, static sites, Craft, etc). | |
## Install Node.js | |
* If Node is not yet installed on the machine, it will need to be [installed](http://nodejs.org/download/) | |
## Install Gulp (if needed) | |
* If Gulp has never been set up on the machine, the gulp CLI will also need to be installed by running `npm install gulp -g` | |
### Install Gulp for the project (if needed) | |
If a package.json file already exists with list of all of the dependencies that Gulp will need for the project, then you can simply switch to the project root directory in the site terminal and run the command `npm install`. This only needs to happen once so that the dependencies can be downloaded for the project. | |
If a package.json file does not exist, switch to the project root directory for the site in a terminal. For this configuration, you can install gulp and the needed dependencies using the command `npm install gulp gulp-compass gulp-autoprefixer gulp-minify-css gulp-uglify gulp-rename gulp-concat gulp-notify gulp-livereload gulp-plumber --save-dev`. You only need to do this once so that the dependencies can be downloaded for the project. | |
## Add the gulp.js file | |
Copy the gulp.js file (below) to the base of your site. The provided gulp.js file is set up to work with the following project directory structure. | |
## Project Directory Structure | |
* project root/ | |
* html/ (web root) | |
* css/ | |
* js/ | |
* images/ | |
* src/ | |
* js/ | |
* plugins.js | |
* site.js | |
* [various .js files] | |
* scss/ | |
* [various .scss files] | |
* styles.scss | |
* system/ (EE system folder) | |
* templates/ (EE templates) | |
* gulpfile.js | |
* package.json (will be added when gulp is installed via CLI) | |
* (gulp.png)[https://dl.dropboxusercontent.com/u/12922578/gulp.png] | |
## Start Growl | |
Make sure Growl is running, as notification will appear in it whenever the browser is livereloaded or whenever there is an error. | |
## Run Gulp | |
* To just compile the scripts and SCSS one time, simply run the default command `gulp`. You can also run any of the other task names, like `gulp styles`. | |
* To watch the templates, .scss, and .js files for changes, and to automatically compile and minify the relevant files, run the command `gulp live`. If the livereload browser extensions are installed and enabled, the browser will automatically refresh when any changes are made to style and javascript files in the *src* directory, or to any template files in the *templates* directory. | |
## Customize | |
You can change the title and image that show up in the Growl messages, by editing the `notifyInfo` object values. :) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//load plugins | |
var gulp = require('gulp'), | |
compass = require('gulp-compass'), | |
autoprefixer = require('gulp-autoprefixer'), | |
minifycss = require('gulp-minify-css'), | |
uglify = require('gulp-uglify'), | |
rename = require('gulp-rename'), | |
concat = require('gulp-concat'), | |
notify = require('gulp-notify'), | |
livereload = require('gulp-livereload'), | |
plumber = require('gulp-plumber'), | |
path = require('path'); | |
//the title and icon that will be used for the Grunt notifications | |
var notifyInfo = { | |
title: 'Gulp', | |
icon: path.join(__dirname, 'gulp.png') | |
}; | |
//error notification settings for plumber | |
var plumberErrorHandler = { errorHandler: notify.onError({ | |
title: notifyInfo.title, | |
icon: notifyInfo.icon, | |
message: "Error: <%= error.message %>" | |
}) | |
}; | |
//styles | |
gulp.task('styles', function() { | |
return gulp.src(['src/scss/**/*.scss']) | |
.pipe(plumber(plumberErrorHandler)) | |
.pipe(compass({ | |
css: 'html/css', | |
sass: 'src/scss', | |
image: 'html/images' | |
})) | |
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')) | |
.pipe(gulp.dest('html/css')) | |
.pipe(rename({ suffix: '.min' })) | |
.pipe(minifycss()) | |
.pipe(gulp.dest('html/css')); | |
}); | |
//scripts | |
gulp.task('scripts', function() { | |
return gulp.src('src/js/**/*.js') | |
.pipe(plumber(plumberErrorHandler)) | |
.pipe(concat('main.js')) | |
.pipe(gulp.dest('html/js')) | |
.pipe(rename({ suffix: '.min' })) | |
.pipe(uglify()) | |
.pipe(gulp.dest('html/js')); | |
}); | |
//watch | |
gulp.task('live', function() { | |
livereload.listen(); | |
//watch .scss files | |
gulp.watch('src/scss/**/*.scss', ['styles']); | |
//watch .js files | |
gulp.watch('src/js/**/*.js', ['scripts']); | |
//reload when a template file, the minified css, or the minified js file changes | |
gulp.watch('templates/**/*.html', 'html/css/styles.min.css', 'html/js/main.min.js', function(event) { | |
gulp.src(event.path) | |
.pipe(plumber()) | |
.pipe(livereload()) | |
.pipe(notify({ | |
title: notifyInfo.title, | |
icon: notifyInfo.icon, | |
message: event.path.replace(__dirname, '').replace(/\\/g, '/') + ' was ' + event.type + ' and reloaded' | |
}) | |
); | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#node files | |
/node_modules/* | |
#sass cache files | |
.sass-cache |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment