forked from christianalfoni/formsy-react
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGulpfile.js
More file actions
130 lines (108 loc) · 3.34 KB
/
Gulpfile.js
File metadata and controls
130 lines (108 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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
});
});