taskerify
Version:
A task-builder based on Laravel-Elixir.
69 lines (52 loc) • 2.47 kB
JavaScript
;
var gulp = require('gulp');
var gutil = require('gulp-util');
var watchify = require('watchify');
var buffer = require('vinyl-buffer');
var Taskerify = require('./../index');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var bundle;
var $ = Taskerify.Plugins;
var config = Taskerify.config;
Taskerify.extend('browserify', function (src, output, baseDir, options) {
var paths = prepGulpPaths(src, baseDir, output);
new Taskerify.Task('browserify', function () {
var stream = config.js.browserify.watchify.enabled ? watchifyStream : browserifyStream;
bundle = function (stream, paths) {
this.log(paths.src, paths.output);
return stream.bundle().on('error', function (e) {
new Taskerify.Notification().error(e, 'Browserify Failed!');
this.emit('end');
}).pipe(source(paths.output.name)).pipe(buffer()).pipe($.if(config.sourcemaps, $.sourcemaps.init({ loadMaps: true }))).pipe($.if(config.production, $.uglify())).pipe($.if(config.sourcemaps, $.sourcemaps.write('.'))).pipe(gulp.dest(paths.output.baseDir)).pipe(new Taskerify.Notification('Browserify Compiled!'));
}.bind(this);
return bundle(stream({
paths: paths,
options: options || config.js.browserify.options
}), paths);
}).watch();
});
var prepGulpPaths = function prepGulpPaths(src, baseDir, output) {
return new Taskerify.GulpPaths().src(src, baseDir || config.get('src.js.folder')).output(output || config.get('dist.js.outputFolder'), 'bundle.js');
};
var browserifyStream = function browserifyStream(data) {
var stream = browserify(data.paths.src.path, data.options);
config.js.browserify.transformers.forEach(function (transformer) {
stream.transform(require(transformer.name), transformer.options || {});
});
config.js.browserify.plugins.forEach(function (plugin) {
stream.plugin(require(plugin.name), plugin.options || {});
});
config.js.browserify.externals.forEach(function (external) {
stream.external(external);
});
return stream;
};
var watchifyStream = function watchifyStream(data) {
var browserify = watchify(browserifyStream(data), config.js.browserify.watchify.options);
browserify.on('log', gutil.log);
browserify.on('update', function () {
bundle(browserify, data.paths);
});
return browserify;
};