UNPKG

adfab-gulp-boilerplate

Version:

Adfab's boilerplate. Helps you kick-start a front-end project within minutes.

64 lines (58 loc) 2.47 kB
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(); };