var htmlreplace = require('gulp-html-replace'); var gulp = require("gulp"); var gutil = require("gulp-util"); var karma = require("karma"); var minimist = require('minimist'); var path = require('path'); var rev = require('gulp-rev'); var shell = require('gulp-shell'); var sprintf = require('sprintf'); var webpack = require("webpack"); var webpackConfig = require("./webpack.config.js"); var WebpackDevServer = require("webpack-dev-server"); var knownOptions = { string: 'env', string: 'region', string: 'bucket', string: 'cloudfront', string: 'colors', default: { bucket: null, cloudfront: null, colors: true, env: null, region: null } }; var options = minimist(process.argv.slice(2), knownOptions); if(options.env && options.env !== 'production' && options.env !== 'development') { throw new Error('Unknown environment config: ' + options.env); } if(options.colors === true || options.colors == 'true' || options.colors == 'yes') { options.colors = true; } else { options.colors = false; } gulp.task('build', ['clean', 'build:webpack']); gulp.task('clean', shell.task(['rm -rf build'])); gulp.task('default', ['webpack-dev-server']); gulp.task('publish', ['clean', 'build', 'publish:assets', 'publish:assets:index', 'publish:index']); gulp.task("build:webpack", ['clean'], function(callback) { var config = Object.create(webpackConfig); var SaveAssetsJson = require('assets-webpack-plugin'); config.output = { filename : "bundle.js", path : path.join(__dirname, 'build'), publicPath: "./" }; config.plugins = (config.plugins || []).concat( new webpack.DefinePlugin({ "process.env": { "NODE_ENV": JSON.stringify(options.env) } }), new webpack.optimize.DedupePlugin(), new webpack.optimize.UglifyJsPlugin(), new SaveAssetsJson() ); webpack(config, function(err, stats) { if(err) throw new gutil.PluginError("webpack:build", err); gutil.log("[webpack:build]", stats.toString({ colors: options.colors })); callback(); }); }); gulp.task("webpack-dev-server", function(callback) { var host = process.env.HOST || "localhost"; var port = parseInt(process.env.PORT, 10) || 8081; var config = Object.create(webpackConfig); config.devtool = "eval"; config.debug = true; new WebpackDevServer(webpack(config), { stats: { colors: true } }).listen(port, host, function(err) { if(err) throw new gutil.PluginError("webpack-dev-server", err); gutil.log("[webpack-dev-server]", sprintf("http://%s:%d/webpack-dev-server/index.html", host, port)); }); }); gulp.task("test", function(done) { var server = new karma.Server({ configFile: __dirname + "/karma.conf.js", singleRun: true, }, done); server.start(); }); gulp.task("tdd", function(done) { var server = new karma.Server({ configFile: __dirname + "/karma.conf.js", }, done); server.start(); });