Skip to content

Instantly share code, notes, and snippets.

@mattidupre
Created May 7, 2015 23:56
Show Gist options
  • Save mattidupre/96f998ff685c8354e8b3 to your computer and use it in GitHub Desktop.
Save mattidupre/96f998ff685c8354e8b3 to your computer and use it in GitHub Desktop.
My personal gulpfile using SASS, Browserify & Watchify, Jade, Retinze, and more...
/** 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