Skip to content

Commit b37a814

Browse files
committed
improve queue
1 parent f817a29 commit b37a814

25 files changed

Lines changed: 1338 additions & 234 deletions

gulpfile.js

Lines changed: 111 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,126 @@
1-
const { src, dest } = require("gulp");
1+
const { src, dest, parallel } = require("gulp");
22
const uglify = require("gulp-uglify");
33
const concat = require("gulp-concat");
44
var order = require("gulp-order");
55
const cleanCss = require("gulp-clean-css");
6+
const crypto = require("crypto");
7+
const fs = require("fs");
8+
const path = require("path");
69

7-
function defaultTask(cb) {
8-
const jsFiles = [
9-
"public/script/external/angular.min.js",
10-
"public/script/external/angular-translate.min.js",
11-
"public/script/external/angular-translate-loader-static-files.min.js",
12-
"public/script/external/angular-sanitize.min.js",
13-
"public/script/external/angular-route.min.js",
14-
"public/script/external/pdf.compat.js",
15-
"public/script/external/pdf.js",
16-
"public/script/external/github-emojis.js",
17-
"public/script/external/marked-emoji.js",
18-
"public/script/external/marked.min.js",
19-
"public/script/external/purify.min.js",
20-
"public/script/external/ansi_up.min.js",
21-
"public/script/external/prism.min.js",
22-
"public/script/external/katex.min.js",
23-
"public/script/external/katex-auto-render.min.js",
24-
"public/script/external/marked-katex-extension.umd.min.js",
25-
"public/script/external/mermaid.min.js",
26-
"public/script/external/marked-mermaid.js",
27-
"public/script/external/notebook.min.js",
28-
"public/script/external/org.js",
29-
"public/script/external/jquery-3.4.1.min.js",
30-
"public/script/external/popper.min.js",
31-
"public/script/external/bootstrap.min.js",
32-
"public/script/external/ace/ace.js",
33-
"public/script/external/ui-ace.min.js",
34-
"public/script/utils.js",
35-
"public/script/ng-pdfviewer.min.js",
36-
"public/script/app.js",
37-
"public/script/admin.js",
38-
];
39-
const cssFiles = [
40-
"public/css/bootstrap.min.css",
41-
"public/css/font-awesome.min.css",
42-
"public/css/notebook.css",
43-
"public/css/katex.min.css",
44-
"public/css/mermaid.css",
45-
"public/css/github-markdown.min.css",
46-
"public/css/style.css",
47-
];
48-
src(jsFiles)
49-
.pipe(order(jsFiles, { base: "./" }))
50-
.pipe(concat("bundle.min.js"))
10+
const coreJsFiles = [
11+
"public/script/external/angular.min.js",
12+
"public/script/external/angular-translate.min.js",
13+
"public/script/external/angular-translate-loader-static-files.min.js",
14+
"public/script/external/angular-sanitize.min.js",
15+
"public/script/external/angular-route.min.js",
16+
"public/script/external/github-emojis.js",
17+
"public/script/external/marked-emoji.js",
18+
"public/script/external/marked.min.js",
19+
"public/script/external/purify.min.js",
20+
"public/script/external/ansi_up.min.js",
21+
"public/script/external/prism.min.js",
22+
"public/script/external/jquery-3.4.1.min.js",
23+
"public/script/external/popper.min.js",
24+
"public/script/external/bootstrap.min.js",
25+
"public/script/utils.js",
26+
];
27+
28+
const vendorJsFiles = [
29+
"public/script/external/pdf.compat.js",
30+
"public/script/external/pdf.js",
31+
"public/script/ng-pdfviewer.min.js",
32+
"public/script/external/katex.min.js",
33+
"public/script/external/katex-auto-render.min.js",
34+
"public/script/external/marked-katex-extension.umd.min.js",
35+
"public/script/external/marked-mermaid.js",
36+
"public/script/external/notebook.min.js",
37+
"public/script/external/org.js",
38+
"public/script/external/ace/ace.js",
39+
"public/script/external/ui-ace.min.js",
40+
"public/script/app.js",
41+
"public/script/admin.js",
42+
];
43+
44+
const mermaidFiles = [
45+
"public/script/external/mermaid.min.js",
46+
];
47+
48+
const cssFiles = [
49+
"public/css/bootstrap.min.css",
50+
"public/css/font-awesome.min.css",
51+
"public/css/notebook.css",
52+
"public/css/katex.min.css",
53+
"public/css/mermaid.css",
54+
"public/css/github-markdown.min.css",
55+
"public/css/style.css",
56+
];
57+
58+
function hashFile(filePath) {
59+
const content = fs.readFileSync(filePath);
60+
return crypto.createHash("md5").update(content).digest("hex").slice(0, 10);
61+
}
62+
63+
function buildCoreJs(cb) {
64+
src(coreJsFiles)
65+
.pipe(order(coreJsFiles, { base: "./" }))
66+
.pipe(concat("core.min.js"))
67+
.pipe(uglify())
68+
.pipe(dest("public/script"))
69+
.on("end", cb);
70+
}
71+
72+
function buildVendorJs(cb) {
73+
src(vendorJsFiles)
74+
.pipe(order(vendorJsFiles, { base: "./" }))
75+
.pipe(concat("vendor.min.js"))
5176
.pipe(uglify())
5277
.pipe(dest("public/script"))
5378
.on("end", cb);
79+
}
80+
81+
function buildMermaidJs(cb) {
82+
src(mermaidFiles)
83+
.pipe(concat("mermaid.min.js"))
84+
.pipe(dest("public/script"))
85+
.on("end", cb);
86+
}
5487

88+
function buildCss(cb) {
5589
src(cssFiles)
5690
.pipe(order(cssFiles, { base: "./" }))
5791
.pipe(concat("all.min.css"))
5892
.pipe(cleanCss())
59-
.pipe(dest("public/css"));
93+
.pipe(dest("public/css"))
94+
.on("end", cb);
6095
}
6196

62-
exports.default = defaultTask;
97+
function writeManifest(cb) {
98+
const files = {
99+
"core.min.js": "public/script/core.min.js",
100+
"vendor.min.js": "public/script/vendor.min.js",
101+
"mermaid.min.js": "public/script/mermaid.min.js",
102+
"all.min.css": "public/css/all.min.css",
103+
};
104+
const manifest = {};
105+
for (const [key, filePath] of Object.entries(files)) {
106+
const hash = hashFile(filePath);
107+
// Insert hash before the compound extension: core.min.js → core.HASH.min.js
108+
const firstDot = key.indexOf(".");
109+
const base = key.slice(0, firstDot);
110+
const ext = key.slice(firstDot);
111+
manifest[key] = `${base}.${hash}${ext}`;
112+
}
113+
fs.writeFileSync(
114+
"public/asset-manifest.json",
115+
JSON.stringify(manifest, null, 2)
116+
);
117+
cb();
118+
}
119+
120+
const buildAssets = parallel(buildCoreJs, buildVendorJs, buildMermaidJs, buildCss);
121+
122+
exports.default = function (cb) {
123+
buildAssets(function () {
124+
writeManifest(cb);
125+
});
126+
};

public/.DS_Store

2 KB
Binary file not shown.

public/asset-manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"core.min.js": "core.3db744fc07.min.js",
3-
"vendor.min.js": "vendor.9df222182a.min.js",
3+
"vendor.min.js": "vendor.9aa24967d7.min.js",
44
"mermaid.min.js": "mermaid.f848a72d16.min.js",
5-
"all.min.css": "all.8d9fbb7ca6.min.css"
5+
"all.min.css": "all.f79970ad3b.min.css"
66
}

public/css/all.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)