Created
May 7, 2015 23:56
-
-
Save mattidupre/96f998ff685c8354e8b3 to your computer and use it in GitHub Desktop.
My personal gulpfile using SASS, Browserify & Watchify, Jade, Retinze, and more...
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
/** package.json Dependencies | |
"devDependencies": { | |
"browserify": "^10.1.3", | |
"browserify-shim": "^3.8.6", | |
"dotenv": "^1.1.0", | |
"fs": "0.0.2", | |
"gulp": "^3.8.11", | |
"gulp-autoprefixer": "^2.2.0", | |
"gulp-bootlint": "^0.5.0", | |
"gulp-data": "^1.2.0", | |
"gulp-jade": "^1.0.0", | |
"gulp-livereload": "^3.8.0", | |
"gulp-retinize": "^0.1.0", | |
"gulp-sass": "^2.0.0", | |
"gulp-sourcemaps": "^1.5.2", | |
"gulp-util": "^3.0.4", | |
"gulp-watch": "^4.2.4", | |
"js-yaml": "^3.3.0", | |
"path": "^0.11.14", | |
"vinyl-source-stream": "^1.1.0", | |
"watchify": "^3.2.1" | |
} | |
**/ | |
var path = require('path'); | |
var fs = require('fs'); | |
var source = require('vinyl-source-stream'); | |
var gutil = require('gulp-util'); | |
var gulp = require('gulp'); | |
var maps = require('gulp-sourcemaps'); | |
var prefix = require('gulp-autoprefixer'); | |
var data = require('gulp-data'); | |
var jade = require('gulp-jade'); | |
var sass = require('gulp-sass'); | |
var yaml = require('js-yaml'); | |
var browserify = require('browserify'); | |
var bshim = require('browserify-shim'); | |
var watchify = require('watchify'); | |
var retinize = require('gulp-retinize'); | |
var bootlint = require('gulp-bootlint'); | |
var livereload = require('gulp-livereload'); | |
var watch = require('gulp-watch'); | |
var p = { | |
in: './source/', | |
out: './public/', | |
} | |
gulp.task('mockups', mockups); | |
gulp.task('styles', styles); | |
gulp.task('scripts', scripts); | |
gulp.task('images', images); | |
gulp.task('etc', etc); | |
gulp.task('watch', function() { | |
// Watch source files and bundle | |
watch([p.in+'jade/**/*.jade', 'mockdata.yml'], mockups); | |
watch([p.in+'scss/**/*.scss'], styles); | |
watch([p.in+'img/**/*.{png,jpg,svg}'], { read: false, events: ['change'] }, images); | |
scripts(true); | |
// Watch destination files and reload | |
var server = livereload(); | |
livereload.listen(); | |
watch(p.out+'**/*', livereload.changed); | |
}); | |
function etc() { | |
gutil.log(gutil.colors.green('Copying extra files...')); | |
return gulp.src(p.in+'/fonts/**/*.woff') | |
.pipe(gulp.dest(p.out+'fonts/')) | |
} | |
function styles() { | |
gutil.log(gutil.colors.green('Compiling styles...')); | |
// Use gulp-concat-css to include vanilla CSS | |
return gulp.src(p.in+'scss/style.scss') | |
.pipe(maps.init()) | |
.pipe(sass({ | |
includePaths: ['node_modules', 'node_modules/bootstrap-sass/assets/stylesheets'], | |
errLogToConsole: true, | |
})) | |
.on('error', gutil.beep) | |
.pipe(prefix({ browsers: [ '> 5%', 'Explorer >= 8' ] })) | |
.pipe(maps.write()) | |
.pipe(gulp.dest(p.out+'css/')) | |
; | |
} | |
function images(file) { | |
gutil.log(gutil.colors.green('Retinizing images...')); | |
return gulp.src(file && file.path || p.in+'img/**/*.{png,jpg,svg}') | |
.pipe(retinize()) | |
.on('error', function(e) { | |
gutil.log(e.message); | |
}) | |
.pipe(gulp.dest(p.out+'img/')) | |
; | |
} | |
function mockups() { | |
gutil.log(gutil.colors.green('Rendering mockups...')); | |
return gulp.src(p.in+'jade/**/*.jade') | |
.pipe(data(function(file) { | |
try { | |
var raw = fs.readFileSync('mockdata.yml', { encoding: 'utf8' }); | |
} catch (e) { | |
gutil.log(gutil.colors.yellow('No mockdata.yml file found. Continuing...')); | |
} | |
try { | |
return yaml.load(raw); | |
} catch (e) { | |
gutil.log(gutil.colors.red('Error (YAML): ' + e.message)); | |
return {}; | |
} | |
})) | |
.pipe(jade( { pretty: true })) | |
.on('error', function(e) { | |
gutil.log(gutil.colors.red(e.message)); | |
gutil.beep(); | |
this.emit('end'); | |
}) | |
.pipe(bootlint({ disabledIds: ['W005'] })) | |
.on('error', function(){} ) | |
.pipe(gulp.dest(p.out)) | |
; | |
} | |
function scripts(watch) { | |
var pathIn = p.in+'js/script.js'; | |
var b = browserify(pathIn, { | |
debug: true, | |
paths: ['node_modules'], | |
}) | |
// .transform(babelify) | |
// .transform(bshim) | |
; | |
if (watch) b = watchify(b); | |
var rebundle = function() { | |
gutil.log(gutil.colors.green('Bundling scripts...')); | |
return b.bundle() | |
.on('error', function(e) { | |
gutil.beep(); | |
gutil.log(gutil.colors.red('Error (Browserify): ' + e.message)); | |
}) | |
.pipe(source(path.basename(pathIn))) | |
// .pipe(buffer()) | |
// .pipe(sourcemaps.init({loadMaps: true})) | |
// .pipe(uglify({ mangle: false })) Add transformations here | |
// .pipe(sourcemaps.write('./')) | |
.pipe(gulp.dest(p.out+'js/')) | |
; | |
}; | |
b.on('update', function() { | |
return rebundle(); | |
}); | |
return rebundle(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment