-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.mjs
More file actions
49 lines (39 loc) · 1.54 KB
/
index.mjs
File metadata and controls
49 lines (39 loc) · 1.54 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
import { readFileSync, writeFileSync, readdirSync } from "fs";
import { minify } from "minify";
import svgToTinyDataUri from "mini-svg-data-uri";
const inputCSSFile = "style.css";
const outputCSSFile = "style.min.css";
// Read style.css
const input_css = readFileSync(inputCSSFile, "utf8");
// Keep a copy of the original CSS for output
var output_css = input_css;
// Find any SVG url() in the CSS
const svgRegex = /url\(['"]?([^'")]+\.svg)['"]?\)/g;
// Read SVG filename from capture group 1 and convert to tiny data URI
for (const match of input_css.matchAll(svgRegex)) {
const svgUrl = match[1];
console.log(`Inlining SVG: ${svgUrl}`);
// Read the SVG file
const svgContent = readFileSync(svgUrl, "utf8");
// Convert SVG to tiny data URI
const tinyDataUri = svgToTinyDataUri(svgContent);
// Replace the SVG URL in the CSS with the tiny data URI
output_css = output_css.replace(match[0], `url("${tinyDataUri}")`);
}
// Minify the CSS
minify.css(output_css).then((minifiedCss) => {
writeFileSync(outputCSSFile, minifiedCss);
console.log(`Minified CSS saved to ${outputCSSFile}`);
});
// Minify the javascript files
const jsFiles = readdirSync("assets/scripts")
.filter(file => file.endsWith(".js"))
.filter(file => !file.endsWith(".min.js"));
for (const file of jsFiles) {
const inputPath = `assets/scripts/${file}`;
const outputPath = `assets/scripts/${file.replace('.js', '.min.js')}`;
minify(inputPath).then((minifiedJs) => {
writeFileSync(outputPath, minifiedJs);
console.log(`Minified JS saved to ${outputPath}`);
});
}