#minify-html #minify #html #style #script

html-minifier

此库可以帮助您同时生成和压缩HTML代码。它还支持压缩 <style><script> 元素中的JS和CSS,并忽略对 <pre><code><textarea> 元素的压缩。

50个稳定版本 (4个主要版本)

5.0.0 2023年12月15日
4.0.0 2022年11月13日
3.0.17 2022年11月2日
3.0.15 2022年3月17日
1.1.3 2018年11月14日

编码 中排名 100

Download history 295/week @ 2024-04-23 248/week @ 2024-04-30 154/week @ 2024-05-07 215/week @ 2024-05-14 610/week @ 2024-05-21 204/week @ 2024-05-28 552/week @ 2024-06-04 362/week @ 2024-06-11 366/week @ 2024-06-18 561/week @ 2024-06-25 558/week @ 2024-07-02 601/week @ 2024-07-09 658/week @ 2024-07-16 747/week @ 2024-07-23 848/week @ 2024-07-30 584/week @ 2024-08-06

每月下载量 2,939
用于 36 个crate(直接使用17个)

MIT 许可证 MIT

67KB
1K SLoC

HTML Minifier

CI

此库可以帮助您同时生成和压缩HTML代码。它还支持压缩 <style><script> 元素中的JS和CSS,并忽略对 <pre><code><textarea> 元素的压缩。

HTML 压缩遵循以下规则

  • ASCII 控制字符(0x00-0x08,0x11-0x1F,0x7F)始终被移除。
  • 注释可以选择移除。(默认移除)
  • 无用的空白字符(空格、制表符和换行符)被移除。
  • 空白字符(空格、制表符和换行符)转换为单个 '\x20' 或单个 '\n',如果可能的话。
  • 空属性值被折叠。(例如 <input readonly=""> => <input readonly> )
  • 除了以下元素外,所有元素的内部HTML都被压缩
    • <pre>
    • <textarea>
    • <code>(可选,默认压缩)
    • <style>(如果 type 属性不受支持)
    • <script>(如果 type 属性不受支持)
  • <script><style> 元素中的 JS 代码和 CSS 代码被 minifier 压缩。

在使用此库之前,不需要完全生成原始(非压缩)HTML,因为此库不会进行反序列化以创建 DOM。

示例

use html_minifier::HTMLMinifier;

let mut html_minifier = HTMLMinifier::new();

html_minifier.digest("<!DOCTYPE html>   <html  ").unwrap();
html_minifier.digest("lang=  en >").unwrap();
html_minifier.digest("
<head>
    <meta name=viewport>
</head>
").unwrap();
html_minifier.digest("
<body class=' container   bg-light '>
    <input type='text' value='123   456' readonly=''  />

    123456
    <b>big</b> 789
    ab
    c
    中文
    字
</body>
").unwrap();
html_minifier.digest("</html  >").unwrap();

assert_eq!("<!DOCTYPE html> <html lang=en>
<head>
<meta name=viewport>
</head>
<body class='container bg-light'>
<input type='text' value='123   456' readonly/>
123456
<b>big</b> 789
ab
c
中文
字
</body>
</html>".as_bytes(), html_minifier.get_html());
use html_minifier::HTMLMinifier;

let mut html_minifier = HTMLMinifier::new();

html_minifier.digest("<pre  >   Hello  world!   </pre  >").unwrap();

assert_eq!(b"<pre>   Hello  world!   </pre>", html_minifier.get_html());
use html_minifier::HTMLMinifier;

let mut html_minifier = HTMLMinifier::new();

html_minifier.digest("<script type='  application/javascript '>   alert('Hello!')    ;   </script>").unwrap();

assert_eq!("<script type='application/javascript'>alert('Hello!')</script>".as_bytes(), html_minifier.get_html());

将 HTML 写入 Writer

如果您不想将 HTML 存储在内存中(例如,写入文件),您可以使用 HTMLMinifierHelper 结构体,它提供了一个低级 API,允许您在调用 digest 方法时传递您的输出实例。

use html_minifier::HTMLMinifierHelper;

use std::fs::File;
use std::io::Read;

let mut input_file = File::open("tests/data/w3schools.com_tryhow_css_example_website.htm").unwrap();
let mut output_file = File::create("tests/data/index.min.html").unwrap();

let mut buffer = [0u8; 256];

let mut html_minifier_helper = HTMLMinifierHelper::new();

loop {
    let c = input_file.read(&mut buffer).unwrap();

    if c == 0 {
        break;
    }

    html_minifier_helper.digest(&buffer[..c], &mut output_file).unwrap();
}

Crates.io

https://crates.io/crates/html-minifier

文档

https://docs.rs/html-minifier

许可

MIT

依赖

~0.6–1MB
~25K SLoC