var gulp = require('gulp');
var gutil = require('gulp-util');
var streamify = require('gulp-streamify');
var uglify = require('gulp-uglify');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var sourcemaps = require('gulp-sourcemaps');
var rev = require('gulp-rev');
var buffer = require('vinyl-buffer');
var concat = require('gulp-concat');
var watchify = require('watchify');
var gulpif = require('gulp-if');
// Helpers
var npmPackages = require('../helpers/npm-packages');
var bowerPackages = require('../helpers/bower-packages');
var isProd = require('../helpers/is-prod');
var watchFiles = require('../helpers/watch-files');
// Config
var config = require('../config').config.scripts;
function buildScript() {
var src = config.src;
var dest = config.dest;
var manifest = config.manifest;
var createSourceMaps = config.createSourceMaps;
var bundler = browserify({
entries: config.entries,
debug: true,
cache: {},
packageCache: {},
insertGlobals: false
})
;
function markExternal(pack) {
bundler.external(pack.id);
}
bowerPackages.forEach(markExternal);
npmPackages.forEach(markExternal);
if (watchFiles.shouldWatch('scripts')) {
bundler.plugin(watchify);
bundler.on('update', bundle);
bundler.on('log', gutil.log);
}
function bundle() {
var stream = bundler.bundle();
gutil.log('Building Scripts...');
gutil.log(isProd());
return stream
.on('error', gutil.log)
.pipe(source(src))
.pipe(gulpif(createSourceMaps, buffer()))
.pipe(gulpif(createSourceMaps, sourcemaps.init({loadMaps: true})))
.pipe(gulpif(isProd(), streamify(
uglify({
compress: {
drop_console: true
},
mangle: true
})
)))
.pipe(gulpif(isProd(), rev()))
.pipe(gulpif(createSourceMaps, sourcemaps.write('./')))
.pipe(gulp.dest(dest))
.pipe(gulpif(isProd(), rev.manifest(manifest)))
.pipe(gulpif(isProd(), gulp.dest(dest)))
;
}
return bundle();
}
gulp.task('scripts', buildScript);