Skip to content

Commit a5b805e

Browse files
committed
Tweak build process so the regexr.js and .css files are named using their file hash.
1 parent 59c7939 commit a5b805e

File tree

2 files changed

+57
-14
lines changed

2 files changed

+57
-14
lines changed

gulpfile.babel.js

+54-11
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const rollup = require("rollup").rollup;
1414
const babel = require("rollup-plugin-babel");
1515
const terser = require("rollup-plugin-terser").terser;
1616
const replace = require("rollup-plugin-replace");
17-
const browser = require("browser-sync").create();
17+
const browser = require("browser-sync");
1818
const Vinyl = require("vinyl");
1919
const Buffer = require("buffer").Buffer;
2020
const del = require("del");
@@ -23,6 +23,9 @@ const createHash = require("crypto").createHash;
2323
const fs = require("fs");
2424
const basename = require("path").basename;
2525

26+
let js_file = "regexr.js";
27+
let css_file = "regexr.css";
28+
2629
// constants
2730
const isProduction = () => process.env.NODE_ENV === "production";
2831
const pkg = require("./package.json");
@@ -54,15 +57,14 @@ const serverCopyAndWatchGlob = [
5457

5558
// tasks
5659
gulp.task("serve", () => {
57-
browser.init({
58-
server: {baseDir: "./"},
59-
options: {ignored: "./dev/**/*"}
60+
browser({
61+
server: { baseDir: "./deploy/" },
6062
});
6163
});
6264

6365
gulp.task("watch", () => {
6466
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"));
6668
gulp.watch("./dev/icons/*.svg", gulp.series("icons"));
6769
gulp.watch("./dev/inject/*", gulp.series("inject", "browserreload"));
6870
gulp.watch("./dev/sass/**/*.scss", gulp.series("sass"));
@@ -98,7 +100,7 @@ gulp.task("js", () => {
98100
bundleCache = bundle.cache;
99101
return bundle.write({
100102
format: "iife",
101-
file: "./deploy/regexr.js",
103+
file: `./deploy/${js_file}`,
102104
name: "regexr",
103105
sourcemap: !isProduction()
104106
})
@@ -120,7 +122,7 @@ gulp.task("sass-themes", gulp.parallel(themes.map(theme => `sass-${theme}`)));
120122

121123
const defaultSass = () => {
122124
const str = buildSass("default")
123-
.pipe(rename("regexr.css"))
125+
.pipe(rename(css_file))
124126
.pipe(gulp.dest("deploy"));
125127

126128
return isProduction()
@@ -134,8 +136,8 @@ gulp.task("sass", gulp.series(defaultSass, "sass-themes"));
134136
gulp.task("html", () => {
135137
return gulp.src("./index.html")
136138
.pipe(template({
137-
js_version: createFileHash("deploy/regexr.js"),
138-
css_version: createFileHash("deploy/regexr.css")
139+
js_file,
140+
css_file,
139141
}))
140142
.pipe(htmlmin({
141143
collapseWhitespace: true,
@@ -145,6 +147,29 @@ gulp.task("html", () => {
145147
.pipe(gulp.dest("build"));
146148
});
147149

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+
148173
gulp.task("icons", () => {
149174
return gulp.src("dev/icons/*.svg")
150175
// strip fill attributes and style tags to facilitate CSS styling:
@@ -197,20 +222,38 @@ gulp.task("copy-server", () => {
197222
.pipe(gulp.dest("./build/"));
198223
});
199224

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+
})
200242

201243
gulp.task("build", gulp.parallel("js", "sass"));
202244
gulp.task("server", gulp.series("copy-server", "watch-server"));
245+
gulp.task("rename", gulp.parallel("rename-css", "rename-js"));
203246

204247
gulp.task("default",
205-
gulp.series("build",
248+
gulp.series("build","dev-html",
206249
gulp.parallel("serve", "watch")
207250
)
208251
);
209252

210253
gulp.task("deploy",
211254
gulp.series(
212255
cb => (process.env.NODE_ENV = "production") && cb(),
213-
"clean", "build", "html", "copy"
256+
"clean", "build", "createFileHashes", "html", "copy", "rename", "clean-build"
214257
)
215258
);
216259

index.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
gtag('config', 'UA-3579542-6');
1414
</script>
1515

16-
<link rel="stylesheet" type="text/css" href="deploy/regexr.css?v=<%= css_version %>">
16+
<link rel="stylesheet" type="text/css" href="<%= css_file %>">
1717

1818
<!-- basic meta tags -->
1919
<meta name="title" content="RegExr: Learn, Build, & Test RegEx" />
@@ -442,8 +442,8 @@ <h1><input type="text" class="name" placeholder="Untitled Test"></input></h1>
442442
</article>
443443
</div>
444444
</div>
445-
446-
<script src="deploy/regexr.js?v=<%= js_version %>"></script>
445+
446+
<script src="<%= js_file %>"></script>
447447
<script id="phpinject">
448448
/** INJECTED BY PHP **/
449449
// first param false indicates a local init.

0 commit comments

Comments
 (0)