@@ -14,7 +14,7 @@ const rollup = require("rollup").rollup;
14
14
const babel = require ( "rollup-plugin-babel" ) ;
15
15
const terser = require ( "rollup-plugin-terser" ) . terser ;
16
16
const replace = require ( "rollup-plugin-replace" ) ;
17
- const browser = require ( "browser-sync" ) . create ( ) ;
17
+ const browser = require ( "browser-sync" ) ;
18
18
const Vinyl = require ( "vinyl" ) ;
19
19
const Buffer = require ( "buffer" ) . Buffer ;
20
20
const del = require ( "del" ) ;
@@ -23,6 +23,9 @@ const createHash = require("crypto").createHash;
23
23
const fs = require ( "fs" ) ;
24
24
const basename = require ( "path" ) . basename ;
25
25
26
+ let js_file = "regexr.js" ;
27
+ let css_file = "regexr.css" ;
28
+
26
29
// constants
27
30
const isProduction = ( ) => process . env . NODE_ENV === "production" ;
28
31
const pkg = require ( "./package.json" ) ;
@@ -54,15 +57,14 @@ const serverCopyAndWatchGlob = [
54
57
55
58
// tasks
56
59
gulp . task ( "serve" , ( ) => {
57
- browser . init ( {
58
- server : { baseDir : "./" } ,
59
- options : { ignored : "./dev/**/*" }
60
+ browser ( {
61
+ server : { baseDir : "./deploy/" } ,
60
62
} ) ;
61
63
} ) ;
62
64
63
65
gulp . task ( "watch" , ( ) => {
64
66
gulp . watch ( "./dev/src/**/*.js" , gulp . series ( "js" , "browserreload" ) ) ;
65
- gulp . watch ( "./index.html" , gulp . series ( "browserreload" ) ) ;
67
+ gulp . watch ( "./index.html" , gulp . series ( "dev-html" , " browserreload") ) ;
66
68
gulp . watch ( "./dev/icons/*.svg" , gulp . series ( "icons" ) ) ;
67
69
gulp . watch ( "./dev/inject/*" , gulp . series ( "inject" , "browserreload" ) ) ;
68
70
gulp . watch ( "./dev/sass/**/*.scss" , gulp . series ( "sass" ) ) ;
@@ -98,7 +100,7 @@ gulp.task("js", () => {
98
100
bundleCache = bundle . cache ;
99
101
return bundle . write ( {
100
102
format : "iife" ,
101
- file : " ./deploy/regexr.js" ,
103
+ file : ` ./deploy/${ js_file } ` ,
102
104
name : "regexr" ,
103
105
sourcemap : ! isProduction ( )
104
106
} )
@@ -120,7 +122,7 @@ gulp.task("sass-themes", gulp.parallel(themes.map(theme => `sass-${theme}`)));
120
122
121
123
const defaultSass = ( ) => {
122
124
const str = buildSass ( "default" )
123
- . pipe ( rename ( "regexr.css" ) )
125
+ . pipe ( rename ( css_file ) )
124
126
. pipe ( gulp . dest ( "deploy" ) ) ;
125
127
126
128
return isProduction ( )
@@ -134,8 +136,8 @@ gulp.task("sass", gulp.series(defaultSass, "sass-themes"));
134
136
gulp . task ( "html" , ( ) => {
135
137
return gulp . src ( "./index.html" )
136
138
. pipe ( template ( {
137
- js_version : createFileHash ( "deploy/regexr.js" ) ,
138
- css_version : createFileHash ( "deploy/regexr.css" )
139
+ js_file ,
140
+ css_file ,
139
141
} ) )
140
142
. pipe ( htmlmin ( {
141
143
collapseWhitespace : true ,
@@ -145,6 +147,29 @@ gulp.task("html", () => {
145
147
. pipe ( gulp . dest ( "build" ) ) ;
146
148
} ) ;
147
149
150
+ gulp . task ( "dev-html" , ( ) => {
151
+ return gulp . src ( "./index.html" )
152
+ . pipe ( template ( {
153
+ js_file,
154
+ css_file,
155
+ } ) )
156
+ . pipe ( htmlmin ( {
157
+ collapseWhitespace : true ,
158
+ conservativeCollapse : true ,
159
+ removeComments : true
160
+ } ) )
161
+ . pipe ( gulp . dest ( "deploy" ) ) ;
162
+ } ) ;
163
+
164
+
165
+ gulp . task ( "createFileHashes" , ( cb ) => {
166
+ const js_version = createFileHash ( `deploy/regexr.js` ) ;
167
+ const css_version = createFileHash ( "deploy/regexr.css" ) ;
168
+ js_file = `deploy/${ js_version } .js` ;
169
+ css_file = `deploy/${ css_version } .css` ;
170
+ cb ( ) ;
171
+ } ) ;
172
+
148
173
gulp . task ( "icons" , ( ) => {
149
174
return gulp . src ( "dev/icons/*.svg" )
150
175
// strip fill attributes and style tags to facilitate CSS styling:
@@ -197,20 +222,38 @@ gulp.task("copy-server", () => {
197
222
. pipe ( gulp . dest ( "./build/" ) ) ;
198
223
} ) ;
199
224
225
+ gulp . task ( "rename-css" , ( ) => {
226
+ return gulp . src ( "./build/deploy/regexr.css" )
227
+ . pipe ( rename ( basename ( css_file ) ) )
228
+ . pipe ( gulp . dest ( "./build/deploy/" ) ) ;
229
+ } ) ;
230
+
231
+ gulp . task ( "rename-js" , ( ) => {
232
+ return gulp . src ( "./build/deploy/regexr.js" )
233
+ . pipe ( rename ( basename ( js_file ) ) )
234
+ . pipe ( gulp . dest ( "./build/deploy/" ) ) ;
235
+ } ) ;
236
+
237
+ gulp . task ( "clean-build" , ( ) => {
238
+ return del ( [
239
+ "./build/deploy/regexr.*" ,
240
+ ] ) ;
241
+ } )
200
242
201
243
gulp . task ( "build" , gulp . parallel ( "js" , "sass" ) ) ;
202
244
gulp . task ( "server" , gulp . series ( "copy-server" , "watch-server" ) ) ;
245
+ gulp . task ( "rename" , gulp . parallel ( "rename-css" , "rename-js" ) ) ;
203
246
204
247
gulp . task ( "default" ,
205
- gulp . series ( "build" ,
248
+ gulp . series ( "build" , "dev-html" ,
206
249
gulp . parallel ( "serve" , "watch" )
207
250
)
208
251
) ;
209
252
210
253
gulp . task ( "deploy" ,
211
254
gulp . series (
212
255
cb => ( process . env . NODE_ENV = "production" ) && cb ( ) ,
213
- "clean" , "build" , "html" , "copy"
256
+ "clean" , "build" , "createFileHashes" , " html", "copy" , "rename" , "clean-build "
214
257
)
215
258
) ;
216
259
0 commit comments