formsy-react/Gulpfile.js

131 lines
3.3 KiB
JavaScript

var gulp = require('gulp');
var source = require('vinyl-source-stream'); // Used to stream bundle for further handling
var browserify = require('browserify');
var watchify = require('watchify');
var reactify = require('reactify');
var gulpif = require('gulp-if');
var uglify = require('gulp-uglify');
var streamify = require('gulp-streamify');
var notify = require('gulp-notify');
var gutil = require('gulp-util');
var shell = require('gulp-shell');
var livereload = require('gulp-livereload');
var glob = require('glob');
var jasminePhantomJs = require('gulp-jasmine2-phantomjs');
var fs = require('fs');
var dependencies = ['react'];
var browserifyTask = function (options) {
// Our app bundler
var appBundler = browserify({
entries: [options.src],
transform: [reactify],
debug: options.development,
cache: {},
packageCache: {},
fullPaths: options.development
});
appBundler.external(dependencies);
// The rebundle process
var rebundle = function () {
var start = Date.now();
var fileName = options.uglify ? 'formsy-react.min.js' : 'formsy-react.js';
console.log('Building APP bundle');
appBundler.bundle()
.on('error', gutil.log)
.pipe(source(fileName))
.pipe(gulpif(options.uglify, streamify(uglify())))
.pipe(gulp.dest(options.dest))
.pipe(notify(function () {
console.log('APP bundle built in ' + (Date.now() - start) + 'ms');
/*
// Fix for requirejs
var fs = require('fs');
var file = fs.readFileSync(options.dest + '/' + fileName).toString();
file = file.replace('define([],e)', 'define(["react"],e)');
fs.writeFileSync(options.dest + '/' + fileName, file);
*/
}));
};
// Fire up Watchify when developing
if (options.development) {
appBundler = watchify(appBundler);
appBundler.on('update', rebundle);
}
rebundle();
// We create a separate bundle for our dependencies as they
// should not rebundle on file changes. This only happens when
// we develop. When deploying the dependencies will be included
// in the application bundle
if (options.development) {
var testFiles = glob.sync('./specs/**/*-spec.js');
var testBundler = browserify({
entries: testFiles,
debug: true,
transform: [reactify],
cache: {},
packageCache: {},
fullPaths: true
});
testBundler.external(dependencies);
var rebundleTests = function () {
var start = Date.now();
console.log('Building TEST bundle');
testBundler.bundle()
.on('error', gutil.log)
.pipe(source('specs.js'))
.pipe(gulp.dest(options.dest))
.pipe(livereload())
.pipe(notify(function () {
console.log('TEST bundle built in ' + (Date.now() - start) + 'ms');
}));
};
testBundler = watchify(testBundler);
testBundler.on('update', rebundleTests);
rebundleTests();
}
}
// Starts our development workflow
gulp.task('default', function () {
livereload.listen({ basePath: 'specs' });
browserifyTask({
development: true,
src: './src/main.js',
dest: './build'
});
});
gulp.task('deploy', function () {
browserifyTask({
development: false,
src: './src/main.js',
dest: './release'
});
browserifyTask({
development: false,
src: './src/main.js',
dest: './release',
uglify: true
});
});