cdto project root$ npm install
Initial configuration assumes directory structure of:
source
styles
scripts
images
index.jade
Start dev server: $ gulp
Build project from source: $ gulp build
| { | |
| "directory": "bower_components" | |
| } |
| { | |
| "name": "project-name", | |
| "version": "0.0.1", | |
| "authors": [ | |
| "author": "Your Name <[email protected]>" | |
| ], | |
| "devDependencies": { | |
| } | |
| } |
| 'use strict'; | |
| //=================================== | |
| // Config | |
| // source files for processing | |
| var sources = { | |
| scripts: [ | |
| 'source/scripts/application.coffee' // custom application scripts | |
| ], | |
| styles: [ | |
| 'source/styles/**/*.scss' // Foundation + custom application styles | |
| ], | |
| jade: [ | |
| 'source/*.jade' | |
| ], | |
| images: [ | |
| 'source/images/**/*.{png,jpg,gif,jpeg,svg}' | |
| ] | |
| }; | |
| // target directories for compiled source files | |
| var targets = { | |
| scripts: 'build/scripts', | |
| styles: 'build/styles', | |
| images: 'build/images', | |
| root: 'build/' | |
| }; | |
| // load all Gulp plugins | |
| var gulp = require('gulp'), | |
| browserSync = require('browser-sync'), | |
| autoprefixer = require('gulp-autoprefixer'), | |
| changed = require('gulp-changed'), | |
| coffee = require('gulp-coffee'), | |
| concat = require('gulp-concat'), | |
| filter = require('gulp-filter'), | |
| imagemin = require('gulp-imagemin'), | |
| jade = require('gulp-jade'), | |
| plumber = require('gulp-plumber'), | |
| replace = require('gulp-replace'), | |
| sass = require('gulp-sass'), | |
| uglify = require('gulp-uglify'); | |
| var reload = browserSync.reload; | |
| //=================================== | |
| // Processes | |
| // compile Jade -> HTML | |
| gulp.task('jade', function() { | |
| return gulp.src( sources.jade ) | |
| .pipe( plumber() ) | |
| .pipe( jade( { pretty: true } ) ) | |
| .pipe( gulp.dest( targets.root ) ); | |
| }); | |
| // compile all custom and third-party SASS -> CSS | |
| gulp.task('styles', function() { | |
| // handle Sass errors so the server process doesn't get terminated | |
| var sass_error = function( e ){ | |
| return console.log( e ); | |
| }; | |
| return gulp.src( sources.styles ) | |
| .pipe( sass( { | |
| onError: sass_error, | |
| errLogToConsole: true, | |
| outputStyle: 'compressed' | |
| } ) ) | |
| .pipe( autoprefixer( [ 'last 2 versions', '> 1%' ] ) ) | |
| .pipe( gulp.dest( targets.styles ) ); | |
| }); | |
| // compress design images | |
| gulp.task('images', function() { | |
| return gulp.src( sources.images ) | |
| .pipe( plumber() ) | |
| // only pipe through modified images | |
| .pipe( changed( targets.images ) ) | |
| .pipe( imagemin() ) | |
| .pipe( gulp.dest( targets.images ) ); | |
| }); | |
| // compile and minify custom scripts (from CoffeeScript) and third-party JS -> combined, minified JS | |
| gulp.task('scripts', function() { | |
| // create filters for selective processing within the pipe() | |
| var coffee_filter = filter( [ 'application.coffee' ] ); | |
| return gulp.src( sources.scripts ) | |
| .pipe( plumber() ) | |
| // parse and minify CoffeeScript | |
| .pipe( coffee_filter ) | |
| .pipe( coffee( { bare: true } ) ) | |
| .pipe( coffee_filter.restore() ) | |
| // concat and minify all scripts | |
| .pipe( concat( 'application.js', { newLine: ';' } ) ) | |
| .pipe( uglify() ) | |
| .pipe( gulp.dest( targets.scripts ) ); | |
| }); | |
| //=================================== | |
| // Tasks | |
| // run the dev server | |
| gulp.task('server', function() { | |
| return browserSync({ | |
| open: true, | |
| reloadDelay: 1200, | |
| notify: false, | |
| watchOptions: { | |
| debounceDelay: 1000 | |
| }, | |
| server: { | |
| baseDir: targets.root | |
| } | |
| }); | |
| }); | |
| // watch source and build directories for changes | |
| gulp.task('watch', function() { | |
| // watch for changes to the source files, trigger compilation | |
| gulp.watch( 'source/**/*.jade', [ 'jade' ] ); | |
| gulp.watch( 'source/scripts/application.coffee', [ 'scripts' ] ); | |
| gulp.watch( sources.styles, [ 'styles' ] ); | |
| gulp.watch( sources.images, [ 'images' ] ); | |
| // watch for changes deployed to the build directory and reload browser | |
| return gulp.watch('build/**/**', function( file ) { | |
| if ( file.type === "changed" ) { | |
| return browserSync.reload(); | |
| } | |
| }); | |
| }); | |
| // build from source w/o starting the dev server | |
| gulp.task( 'build', [ 'scripts', 'styles', 'jade' ] ); | |
| // build from source and start dev server | |
| gulp.task( 'default', [ 'watch', 'server', 'build' ] ); |
cd to project root$ npm installInitial configuration assumes directory structure of:
source
styles
scripts
images
index.jade
Start dev server: $ gulp
Build project from source: $ gulp build
| { | |
| "name": "project-name", | |
| "version": "0.0.1", | |
| "description": "", | |
| "author": "Your Name <[email protected]>", | |
| "devDependencies": { | |
| "browser-sync": "latest", | |
| "gulp": "latest", | |
| "gulp-add-src": "latest", | |
| "gulp-autoprefixer": "latest", | |
| "gulp-changed": "latest", | |
| "gulp-coffee": "latest", | |
| "gulp-concat": "latest", | |
| "gulp-filter": "latest", | |
| "gulp-imagemin": "latest", | |
| "gulp-jade": "latest", | |
| "gulp-modulizr": "latest", | |
| "gulp-plumber": "latest", | |
| "gulp-replace": "latest", | |
| "gulp-sass": "latest", | |
| "gulp-uglify": "latest" | |
| } | |
| } |