adfab-gulp-boilerplate
Version:
Adfab's boilerplate. Helps you kick-start a front-end project within minutes.
64 lines (58 loc) • 2.47 kB
JavaScript
module.exports = function(configName) {
const gulp = require('gulp');
const notify = require('gulp-notify');
const browserify = require('browserify');
const babelify = require('babelify'); // eslint-disable-line no-unused-vars
const gulpif = require('gulp-if');
const watchify = require('watchify');
const source = require('vinyl-source-stream');
const buffer = require('vinyl-buffer');
const uglify = require('gulp-uglify');
const browserSync = require('browser-sync');
const util = require('gulp-util');
const runSequence = require('run-sequence');
const config = util.env.boilerplate.config;
const scriptConfig = config.tasks[configName];
const isWatching = ['serve', 'watch'].indexOf(process.argv[2]) >= 0;
// Error notifications
var handleError = function(task) {
return function(err) {
notify.onError({
message: task + ' failed, check the logs..'
})(err);
util.log(util.colors.bgRed(task + ' error:'), util.colors.red(err));
this.emit('end');
};
};
// TODO: If no babel presets, don't use babel at all
var bundler = browserify( scriptConfig.source, {
basedir: config.sourceRoot,
debug: !util.env.production,
cache: {},
packageCache: {},
}).transform('babelify', { presets: [scriptConfig.babelPresets] });
if(isWatching) {
bundler = watchify(bundler);
}
var bundle = function() {
return bundler.bundle()
.on('error', handleError('JS'))
.pipe(source(scriptConfig.destinationFile))
.pipe(buffer())
.pipe(gulpif(util.env.production, uglify().on('error', function(err) {
util.log(util.colors.bgRed('UglifyJS error:'), util.colors.red(err));
})))
.pipe(gulp.dest(config.destinationRoot + scriptConfig.destination))
.on('end', function() {
if(scriptConfig.hasOwnProperty('runafter')) {
runSequence(scriptConfig.runafter);
}
})
.pipe(gulpif(isWatching, browserSync.stream({once: true})))
.pipe(notify({message: 'Successfully compiled scripts for task ' + configName, onLast: true}));
};
if(isWatching) {
bundler.on('update', bundle);
}
return bundle();
};