1
1
'use strict' ;
2
2
3
- var path = require ( 'path' ) ,
3
+ const path = require ( 'path' ) ,
4
4
gulp = require ( 'gulp' ) ,
5
5
gutil = require ( 'gulp-util' ) ,
6
6
plumber = require ( 'gulp-plumber' ) ,
7
7
merge = require ( 'merge-stream' ) ,
8
8
del = require ( 'del' ) ,
9
- runSequence = require ( 'run-sequence' ) ,
10
9
buffer = require ( 'vinyl-buffer' ) ,
11
10
source = require ( 'vinyl-source-stream' ) ,
12
11
watchify = require ( 'watchify' ) ,
@@ -25,16 +24,28 @@ var path = require('path'),
25
24
csswring = require ( 'csswring' ) ,
26
25
htmlreplace = require ( 'gulp-html-replace' ) ,
27
26
svgSprite = require ( 'gulp-svg-sprite' ) ,
28
- replace = require ( 'gulp-replace' ) ,
29
27
svg2png = require ( 'gulp-svg2png' ) ,
30
28
favicons = require ( 'favicons' ) . stream ,
29
+ template = require ( 'gulp-template' ) ,
31
30
ghPages = require ( 'gulp-gh-pages' ) ,
32
31
minimist = require ( 'minimist' ) ,
33
32
appVersion = require ( './package' ) . version ,
34
33
appConfig = require ( './package' ) . config . application ;
35
34
35
+ const cmdOptions = minimist ( process . argv . slice ( 2 ) , {
36
+ string : 'baseUrl' ,
37
+ boolean : 'notls' ,
38
+ default : {
39
+ baseUrl : '/'
40
+ }
41
+ } ) ;
42
+
43
+ const options = Object . assign ( { } , cmdOptions , {
44
+ youtubeApiKey : process . env . MIXTUBE_YOUTUBE_API_KEY
45
+ } ) ;
46
+
36
47
function browserifiedSrc ( src , baseDir ) {
37
- var b = browserify ( src , { cache : { } , packageCache : { } , fullPaths : false , debug : true } ) ;
48
+ const b = browserify ( src , { cache : { } , packageCache : { } , fullPaths : false , debug : true } ) ;
38
49
// convert bundle paths to IDS to save bytes in browserify bundles
39
50
b . plugin ( collapse ) ;
40
51
b . on ( 'log' , gutil . log ) ;
@@ -43,7 +54,7 @@ function browserifiedSrc(src, baseDir) {
43
54
}
44
55
45
56
function watchifiedSrc ( src , baseDir , pipelineFn ) {
46
- var b = watchify ( browserify ( src , { cache : { } , packageCache : { } , fullPaths : true , debug : true } ) ) ;
57
+ const b = watchify ( browserify ( src , { cache : { } , packageCache : { } , fullPaths : true , debug : true } ) ) ;
47
58
48
59
function doBundle ( ) {
49
60
return pipelineFn (
@@ -94,7 +105,7 @@ function doSvg() {
94
105
}
95
106
96
107
function doInlineCss ( opts ) {
97
- var postCssFilters = [
108
+ const postCssFilters = [
98
109
autoprefixer ( { browsers : [ 'last 1 version' ] } )
99
110
] ;
100
111
if ( opts && opts . minify ) {
@@ -108,7 +119,11 @@ function doInlineCss(opts) {
108
119
}
109
120
110
121
function doHtml ( ) {
111
- return gulp . src ( 'app/index.html' , { base : 'app' } ) ;
122
+ return gulp . src ( 'app/index.html' , { base : 'app' } )
123
+ . pipe ( template ( {
124
+ baseUrl : options . baseUrl ,
125
+ youtubeApiKey : options . youtubeApiKey
126
+ } ) ) ;
112
127
}
113
128
114
129
function doFavicons ( htmlCodeCb ) {
@@ -144,23 +159,18 @@ function doFavicons(htmlCodeCb) {
144
159
} , htmlCodeCb ) ) ;
145
160
}
146
161
147
- var options = minimist ( process . argv . slice ( 2 ) , {
148
- boolean : 'no-tls' ,
149
- default : { tls : true }
150
- } ) ;
151
-
152
- gulp . task ( 'jshint' , function ( ) {
162
+ function jsHint ( ) {
153
163
return gulp . src ( 'app/scripts/**/*.js' )
154
164
. pipe ( jshint ( ) )
155
165
. pipe ( jshint . reporter ( 'jshint-stylish' ) ) ;
156
- } ) ;
166
+ }
157
167
158
- gulp . task ( 'svg:dev' , function ( ) {
168
+ function svgDev ( ) {
159
169
return doSvg ( )
160
170
. pipe ( gulp . dest ( 'build/images' ) ) ;
161
- } ) ;
171
+ }
162
172
163
- gulp . task ( 'css:dev' , function ( ) {
173
+ function cssDev ( ) {
164
174
return gulp . src ( 'app/styles/css/main.scss' )
165
175
. pipe ( plumber ( ) )
166
176
. pipe ( sourcemaps . init ( ) )
@@ -171,9 +181,9 @@ gulp.task('css:dev', function() {
171
181
. pipe ( sourcemaps . write ( ) )
172
182
. pipe ( gulp . dest ( 'build/styles' ) )
173
183
. pipe ( reload ( { stream : true } ) ) ;
174
- } ) ;
184
+ }
175
185
176
- gulp . task ( 'js:dev' , function ( ) {
186
+ function jsDev ( ) {
177
187
function pipelineFn ( pipeline ) {
178
188
return pipeline
179
189
. pipe ( buffer ( ) )
@@ -187,42 +197,54 @@ gulp.task('js:dev', function() {
187
197
return merge (
188
198
watchifiedSrc ( './app/scripts/main.js' , './app/scripts/' , pipelineFn ) ,
189
199
watchifiedSrc ( './app/scripts/components/capabilities/videoCallPlayTest.js' , './app/scripts/' , pipelineFn ) ) ;
190
- } ) ;
200
+ }
191
201
192
- gulp . task ( 'html:dev' , function ( ) {
202
+ function htmlDev ( ) {
193
203
return doHtml ( )
194
204
. pipe ( gulp . dest ( 'build' ) ) ;
195
- } ) ;
205
+ }
196
206
197
- gulp . task ( 'clean:dev' , function ( ) {
198
- del ( 'build' ) ;
199
- } ) ;
207
+ function cleanDev ( ) {
208
+ return del ( 'build' ) ;
209
+ }
210
+
211
+ function watchDev ( done ) {
212
+ gulp . watch ( 'app/scripts/**/*.js' , jsHint ) ;
213
+ gulp . watch ( 'app/index.html' , htmlDev ) ;
214
+ gulp . watch ( 'app/images/*.svg' , svgDev ) ;
215
+ gulp . watch ( 'app/styles/**/*.scss' , cssDev ) ;
216
+
217
+ done ( ) ;
218
+ }
219
+
220
+ const serve = gulp . series (
221
+ // prepare
222
+ gulp . parallel ( cleanDev , jsHint ) ,
223
+
224
+ // pre build assets
225
+ gulp . parallel ( cssDev , jsDev , svgDev , htmlDev ) ,
226
+
227
+ watchDev ,
200
228
201
- gulp . task ( 'serve' , [ 'clean:dev' , 'jshint' ] , function ( done ) {
202
- runSequence ( [ 'css:dev' , 'js:dev' , 'svg:dev' , 'html:dev' ] , function ( ) {
203
- gulp . watch ( 'app/scripts/**/*.js' , [ 'jshint' ] ) ;
204
- gulp . watch ( 'app/index.html' , [ 'html:dev' ] ) ;
205
- gulp . watch ( 'app/images/*.svg' , [ 'svg:dev' ] ) ;
206
- gulp . watch ( 'app/styles/**/*.scss' , [ 'css:dev' ] ) ;
229
+ function serverDev ( done ) {
207
230
208
231
browserSync ( {
209
232
open : false ,
210
233
notify : false ,
211
234
server : [ 'build' , 'app' ] ,
212
- https : options . tls ,
235
+ https : ! options . notls ,
213
236
ghostMode : false
214
237
} ) ;
215
238
216
239
done ( ) ;
217
240
} ) ;
218
- } ) ;
219
241
220
- gulp . task ( 'svg:dist' , function ( ) {
242
+ function svgDist ( ) {
221
243
return doSvg ( )
222
244
. pipe ( gulp . dest ( 'dist/images' ) ) ;
223
- } ) ;
245
+ }
224
246
225
- gulp . task ( 'css:dist' , function ( ) {
247
+ function cssDist ( ) {
226
248
return gulp . src ( 'app/styles/css/main.scss' )
227
249
. pipe ( plumber ( ) )
228
250
. pipe ( sourcemaps . init ( ) )
@@ -233,9 +255,9 @@ gulp.task('css:dist', function() {
233
255
] ) )
234
256
. pipe ( sourcemaps . write ( './' ) )
235
257
. pipe ( gulp . dest ( 'dist/styles' ) ) ;
236
- } ) ;
258
+ }
237
259
238
- gulp . task ( 'js:dist' , function ( ) {
260
+ function jsDist ( ) {
239
261
return merge (
240
262
browserifiedSrc ( './app/scripts/main.js' , './app/scripts/' ) ,
241
263
browserifiedSrc ( './app/scripts/components/capabilities/videoCallPlayTest.js' , './app/scripts/' ) )
@@ -245,22 +267,21 @@ gulp.task('js:dist', function() {
245
267
. pipe ( uglify ( ) )
246
268
. pipe ( sourcemaps . write ( './' ) )
247
269
. pipe ( gulp . dest ( 'dist/scripts' ) ) ;
248
- } ) ;
270
+ }
249
271
250
- gulp . task ( 'html:dist' , function ( ) {
251
- var doHtmlStream = gutil . noop ( ) ,
252
- doFaviconsStream = gutil . noop ( ) ;
272
+ function htmlDist ( ) {
273
+ const doHtmlStream = gutil . noop ( ) , doFaviconsStream = gutil . noop ( ) ;
253
274
254
- var doFaviconsPromise = new Promise ( function ( resolve ) {
255
- doFavicons ( function ( htmlCode ) {
275
+ const doFaviconsPromise = new Promise ( function ( resolve ) {
276
+ doFavicons ( htmlCode => {
256
277
resolve ( htmlCode ) ;
257
278
} )
258
279
. pipe ( gulp . dest ( 'dist' ) )
259
280
. pipe ( doFaviconsStream ) ;
260
281
} ) ;
261
282
262
283
doFaviconsPromise
263
- . then ( function ( htmlCode ) {
284
+ . then ( htmlCode => {
264
285
265
286
doHtml ( )
266
287
. pipe ( htmlreplace ( {
@@ -275,36 +296,45 @@ gulp.task('html:dist', function() {
275
296
} ) ;
276
297
277
298
return merge ( doHtmlStream , doFaviconsStream ) ;
278
- } ) ;
299
+ }
279
300
280
- gulp . task ( 'clean:dist' , function ( ) {
281
- del ( 'dist' ) ;
282
- } ) ;
301
+ function cleanDist ( ) {
302
+ return del ( 'dist' ) ;
303
+ }
283
304
284
- gulp . task ( 'dist' , [ 'clean:dist' , 'jshint' ] , function ( done ) {
285
- runSequence ( [ 'js:dist' , 'css:dist' , 'html:dist' , 'svg:dist' ] , done ) ;
286
- } ) ;
305
+ const dist = gulp . series (
306
+ gulp . parallel ( cleanDist , jsHint ) ,
287
307
288
- gulp . task ( 'serve:dist' , [ 'dist' ] , function ( ) {
289
- browserSync ( {
290
- open : false ,
291
- notify : false ,
292
- server : {
293
- baseDir : 'dist' ,
294
- middleware : compression ( )
295
- } ,
296
- https : options . tls ,
297
- ghostMode : false
298
- } ) ;
299
- } ) ;
308
+ gulp . parallel ( jsDist , cssDist , htmlDist , svgDist )
309
+ ) ;
300
310
301
- gulp . task ( 'dist:gh' , [ 'dist' ] , function ( ) {
302
- return gulp . src ( 'dist/index.html' )
303
- . pipe ( replace ( '<base href="/">' , '<base href="/mixtube/">' ) )
304
- . pipe ( gulp . dest ( 'dist' ) ) ;
305
- } ) ;
311
+ const serveDist = gulp . series (
312
+ dist ,
306
313
307
- gulp . task ( 'deploy:gh' , [ 'dist:gh' ] , function ( ) {
314
+ function server ( ) {
315
+ browserSync ( {
316
+ open : false ,
317
+ notify : false ,
318
+ server : {
319
+ baseDir : 'dist' ,
320
+ middleware : compression ( )
321
+ } ,
322
+ https : ! options . notls ,
323
+ ghostMode : false
324
+ } ) ;
325
+ } ) ;
326
+
327
+ function pushGhPagesDist ( ) {
308
328
return gulp . src ( 'dist/**/*' )
309
329
. pipe ( ghPages ( ) ) ;
310
- } ) ;
330
+ }
331
+
332
+ const deployGh = gulp . series (
333
+ dist ,
334
+ pushGhPagesDist
335
+ ) ;
336
+
337
+ gulp . task ( 'serve' , serve ) ;
338
+ gulp . task ( 'dist' , dist ) ;
339
+ gulp . task ( 'serve:dist' , serveDist ) ;
340
+ gulp . task ( 'deploy:gh' , deployGh ) ;
0 commit comments