forked from vocalize/vocalize
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
224 lines (203 loc) · 5.48 KB
/
gulpfile.js
File metadata and controls
224 lines (203 loc) · 5.48 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
/**
* GULP
*
* TASKS
*
* - default
* --> watches and lints all js files
* --> converts jsx - js and puts relevant files in dist folder
*
* - production
* --> tests code
* --> builds, concats, minifies
* --> sets index.html script to minified source
*
* - test
* --> runs unit and integration tests
*
* - test-coverage
* --> runs unit and integration tests
* --> gives coverage istanbul report
*/
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var minifyCss = require('gulp-minify-css');
var sass = require('gulp-sass');
var htmlreplace = require('gulp-html-replace');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var watchify = require('watchify');
var reactify = require('reactify');
var streamify = require('gulp-streamify');
var jshint = require('gulp-jshint');
var mocha = require('gulp-mocha');
var istanbul = require('gulp-istanbul');
var util = require('gulp-util');
// Set up directories
var path = {
html: 'public/index.html',
min: 'build.min.js',
out: 'build.js',
dest: 'dist',
dest_build: 'dist/build',
dest_src: 'dist/src',
entry: './public/main.js',
js: ['app/**/*.js', 'test/**/*.js', 'dist/public/src/build.js', '!app/aws/node_modules/**/*.js']
};
var cssPath = {
src: 'public/style/**/*.scss',
dest: 'dist/styles',
min: 'style.css',
assetsSrc: 'public/assets/*',
assetsDist: 'dist/assets'
};
// Default
gulp.task('default', ['watch', 'sass', 'replaceHtml-dev']);
// Production
gulp.task('production', ['test', 'replaceHtml-prod', 'sass', 'build']);
// Copies index.html to the dist folder
gulp.task('copy', function() {
gulp.src(path.html)
.pipe(gulp.dest(path.dest));
});
gulp.task('copy-assets', function() {
gulp.src(cssPath.assetsSrc)
.pipe(gulp.dest(cssPath.assetsDist));
});
// Watches
gulp.task('watch', function() {
// Copy index.html on any changes
gulp.watch(path.html, ['copy', 'replaceHtml-dev']);
// Watch all .js files for linting
gulp.watch(path.js, ['lint']);
// Watch for css changes
gulp.watch(cssPath.src, ['sass']);
// Browserify
// Changes jsx --> js
// Works browserify magic
var watcher = watchify(browserify({
entries: [path.entry],
transform: [reactify],
debug: true,
cache: {},
packageCache: {},
fullPaths: true
}));
// Concat js files and pipe code to the dest folder
return watcher.on('update', function() {
watcher.bundle()
.pipe(source(path.out))
.pipe(gulp.dest(path.dest_src));
console.log('updated');
})
.on('log', function(msg) {
console.log(msg);
})
.bundle()
.pipe(source(path.out))
.pipe(gulp.dest(path.dest_src));
});
// Production build
// Concats, converts jsx-js, browserfies, and minifies
gulp.task('build', function() {
browserify({
entries: [path.entry],
transform: [reactify],
debug: true
})
.bundle()
.pipe(source(path.min))
.pipe(streamify(uglify()))
.pipe(gulp.dest(path.dest_build));
});
// Minifies and concats css files
gulp.task('sass', ['copy-assets'], function() {
var sassOptions = {
errLogToConsole: true,
outputStyle: 'expanded'
};
return gulp
.src(cssPath.src)
.pipe(sass(sassOptions))
.on('error', sass.logError)
.pipe(gulp.dest(cssPath.dest));
});
// Replaces script source in index.html to minified source from dest/build
gulp.task('replaceHtml-prod', function() {
gulp.src(path.html)
.pipe(htmlreplace({
'js': 'build/' + path.min,
'css': 'styles/' + cssPath.min
}))
.pipe(gulp.dest(path.dest));
});
// Replaces script source in index.html to build src
gulp.task('replaceHtml-dev', function() {
gulp.src(path.html)
.pipe(htmlreplace({
'js': 'src/build.js',
'css': 'styles/' + cssPath.min
}))
.pipe(gulp.dest(path.dest));
});
// Sets up istanbul
gulp.task('pre-test', function() {
return gulp.src(['app/*.js', 'app/models/*.js', 'app/controllers/*.js', 'app/aws/*.js', 'dataScraping/lib/*.js'])
.pipe(istanbul().on('error', util.log))
.pipe(istanbul.hookRequire());
});
// Runs tests and outputs istanbul coverage report
gulp.task('test-coverage', ['pre-test'], function() {
return gulp.src(['test/**/*.js'])
.pipe(mocha())
.pipe(istanbul.writeReports())
.once('error', function() {
process.exit(1);
})
.once('end', function() {
process.exit();
});
});
// Runs unit and integration tests
gulp.task('test', function() {
return gulp.src(['test/**/*.js'])
.pipe(mocha())
.once('error', function(err) {
console.log(err);
process.exit(1);
})
.once('end', function() {
process.exit();
});
});
// Runs unit and integration tests
gulp.task('test-integration', function() {
return gulp.src(['test/integration/*.js'])
.pipe(mocha())
.once('error', function(err) {
console.log(err);
process.exit(1);
})
.once('end', function() {
process.exit();
});
});
// Runs a single test
gulp.task('test-one', function() {
return gulp.src(['test/unit/audio-parser.js'])
.pipe(mocha())
.once('error', function(err) {
console.log(err);
process.exit(1);
})
.once('end', function() {
process.exit();
});
});
// Lints js files
gulp.task('lint', function() {
return gulp.src(['app/**/*.js', 'dataScraping/lib/*.js', 'test/**/*.js', 'dist/public/src/build.js', '!app/aws/node_modules/**/*.js'])
.pipe(jshint())
.pipe(jshint.reporter('default'));
});