better js minification
Some checks are pending
ci/woodpecker/push/publish Pipeline is pending

This commit is contained in:
Mylloon 2023-04-24 15:43:08 +02:00
parent 9c0f4f95ea
commit 8ba2862cca
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 46 additions and 11 deletions

32
Cargo.lock generated
View file

@ -860,6 +860,7 @@ dependencies = [
"comrak",
"glob",
"minify-html",
"minify-js 0.5.6",
"ramhorns",
"reqwest",
"serde",
@ -1044,6 +1045,10 @@ name = "hashbrown"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
dependencies = [
"ahash 0.8.3",
"bumpalo",
]
[[package]]
name = "heck"
@ -1404,7 +1409,7 @@ dependencies = [
"css-minify",
"lazy_static",
"memchr",
"minify-js",
"minify-js 0.4.3",
"rustc-hash",
]
@ -1415,7 +1420,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c300f90ba1138b5c5daf5d9441dc9bdc67b808aac22cf638362a2647bc213be4"
dependencies = [
"lazy_static",
"parse-js",
"parse-js 0.10.3",
]
[[package]]
name = "minify-js"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22d6c512a82abddbbc13b70609cb2beff01be2c7afff534d6e5e1c85e438fc8b"
dependencies = [
"lazy_static",
"parse-js 0.17.0",
]
[[package]]
@ -1608,6 +1623,19 @@ dependencies = [
"memchr",
]
[[package]]
name = "parse-js"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ec3b11d443640ec35165ee8f6f0559f1c6f41878d70330fe9187012b5935f02"
dependencies = [
"aho-corasick 0.7.20",
"bumpalo",
"hashbrown 0.13.2",
"lazy_static",
"memchr",
]
[[package]]
name = "paste"
version = "1.0.12"

View file

@ -18,6 +18,7 @@ toml = "0.7.3"
serde = { version = "1.0.159", features = ["derive"] }
serde_yaml = "0.9"
minify-html = "0.10.8"
minify-js = "0.5.6"
glob = "0.3.1"
comrak = "0.18"
reqwest = { version = "0.11", features = ["json"] }

View file

@ -2,7 +2,6 @@ use serde::Deserialize;
use std::{fs, path::PathBuf};
use glob::glob;
use minify_html::{minify, Cfg};
use std::{fs::File, io::Write, path::Path};
use crate::template::Template;
@ -115,11 +114,11 @@ fn init(dist_dir: String, static_dir: String, templates_dir: String) -> String {
if cfg!(debug_assertions) {
".".to_owned()
} else {
let cfg = Cfg {
let cfg = minify_html::Cfg {
keep_closing_tags: true,
minify_css: true,
minify_js: true,
..Cfg::spec_compliant()
..minify_html::Cfg::spec_compliant()
};
// Static files
@ -147,24 +146,31 @@ fn init(dist_dir: String, static_dir: String, templates_dir: String) -> String {
}
/// Minify some assets for production
fn minify_and_copy(cfg: &Cfg, path: PathBuf, path_with_dist: String) {
fn minify_and_copy(cfg: &minify_html::Cfg, path: PathBuf, path_with_dist: String) {
// Create folders
let new_path = Path::new(&path_with_dist);
fs::create_dir_all(new_path.parent().unwrap()).unwrap();
let session = minify_js::Session::new();
let mut copy = true;
if let Some(ext) = path.extension() {
let js_ext = "js";
let current_ext = ext.to_string_lossy().to_lowercase();
// List of files who should be minified
if ["html", "css", "js", "svg", "webmanifest", "xml"]
.iter()
.any(|item| ext.to_string_lossy().to_lowercase().contains(item))
{
if ["html", "css", js_ext, "svg", "webmanifest", "xml"].contains(&current_ext.as_str()) {
// We won't copy, we'll minify
copy = false;
// Minify
let data = fs::read(&path).unwrap();
let minified = minify(&data, cfg);
let minified = if current_ext == js_ext {
let mut out = Vec::new();
minify_js::minify(&session, minify_js::TopLevelMode::Global, &data, &mut out)
.unwrap();
out
} else {
minify_html::minify(&data, cfg)
};
// Write files
let file = File::create(&path_with_dist);