Created
November 10, 2015 00:24
-
-
Save davidbyttow/249c3156de491f999e40 to your computer and use it in GitHub Desktop.
Gulp file supporting Babel, Browserify, Watchify, Sass, etc.
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
var babelify = require('babelify'); | |
var browserify = require('browserify'); | |
var gulp = require('gulp'); | |
var sass = require('gulp-sass'); | |
var source = require('vinyl-source-stream'); | |
var streamify = require('gulp-streamify'); | |
var uglify = require('gulp-uglify'); | |
var watchify = require('watchify'); | |
var jsSrcDir = './src/main/resources/web/js'; | |
var jsEntryFile = jsSrcDir + '/main.js'; | |
var jsBundleFile = 'bundle.min.js'; | |
var jsDstDir = './src/main/resources/static/js'; | |
var scssPages = './src/main/resources/web/js/style/*.scss'; | |
var cssDstDir = './src/main/resources/static/css/'; | |
function buildBundle(obfuscate, watch) { | |
var bundler = browserify({ | |
entries: [jsEntryFile], | |
debug: false, | |
cache: {}, | |
packageCache: {}, | |
extensions: ['.js', '.json', '.jsx'], | |
paths: [jsSrcDir], | |
fullPaths: false | |
}); | |
bundler = bundler.transform('babelify', {presets: ['es2015', 'react']}); | |
function bundle(b) { | |
var startMs = Date.now(); | |
var db = b.bundle() | |
.on('error', function(err) { | |
console.log(err.message); | |
this.emit('end'); | |
}) | |
.pipe(source(jsBundleFile)) | |
if (obfuscate) { | |
db.pipe(streamify(uglify())); | |
} | |
db.pipe(gulp.dest(jsDstDir)); | |
console.log('Updated bundle file in', (Date.now() - startMs) + 'ms'); | |
return db; | |
} | |
if (watch) { | |
bundler = watchify(bundler) | |
.on('update', function() { | |
bundle(bundler); | |
}); | |
} | |
return bundle(bundler); | |
} | |
gulp.task('build-js', function() { | |
buildBundle(false, false); | |
}); | |
gulp.task('watch-js', function() { | |
buildBundle(false, true); | |
}); | |
gulp.task('release-js', function() { | |
buildBundle(true, false); | |
}); | |
function buildCss(minify) { | |
// TODO(d): Support minification | |
return gulp.src(scssPages) | |
.pipe(sass().on('error', sass.logError)) | |
.pipe(gulp.dest(cssDstDir)); | |
} | |
gulp.task('build-sass', function () { | |
buildCss(false); | |
}); | |
gulp.task('watch-sass', function () { | |
gulp.watch(scssPages, ['build-sass']); | |
}); | |
gulp.task('release-sass', function () { | |
buildCss(true); | |
}); | |
gulp.task('default', ['build-js', 'build-sass']); | |
gulp.task('release', ['release-js', 'release-sass']); | |
gulp.task('dev', ['watch-js', 'watch-sass']); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment