zamcoder/laravel9-html-minifier

Html Minifier 是一个简单的包,用于在将输出 HTML、CSS 样式和 JavaScript 渲染到浏览器之前对其进行压缩,适用于您的 Laravel 应用程序。

dev-main 2023-06-19 01:20 UTC

This package is auto-updated.

Last update: 2024-09-19 04:09:40 UTC


README

Build Status Latest Stable Version Total Downloads License

Laravel 9 Html Minifier

此包最初属于 https://github.com/dz-id/laravel-html-minifier,因为他尚未更新 Laravel 9,所以我尝试更新它,如果有什么错误,请见谅。

这是一个简单的包,用于在将 HTML、CSS 样式和 JavaScript 渲染到 Laravel 9 应用程序的浏览器之前对其进行压缩。

此工具仅在输出是有效的 HTML 结构(包括 HTML、head 和 body 标签)时才起作用。例如:

  • 有效的 HTML(将被处理和压缩)
<html>
   <head>
      <!-- head -->
   </head>
   <body>
      <!-- body -->
   </body>
</html>
  • 无效的 HTML(不会被压缩)
< html>
   <head>
      <!-- head -->
   </head>
   <body>
      <!-- body -->
   </body>
</ html>

atau

<html>
   <head>
      <!-- head -->
   </head>
</html>

示例输出

Sebelum

Sesudah

安装

需要

您可以通过 Composer 2x 安装此包作为第一步。

composer require zamcoder/laravel9-html-minifier

发布配置文件

php artisan vendor:publish --provider="zamcoder\Laravel9HtmlMinifier\HtmlMinifierServiceProvider"

别忘了将其注册到全局中间件

\zamcoder\Laravel9HtmlMinifier\Middleware\MinifyHtml::class 和其他中间件(如果需要)必须注册到 kernel 中,例如

// file : app/Http/Karnel.php

protected $middleware = [
    ....
    \zamcoder\Laravel9HtmlMinifier\Middleware\MinifyHtml::class,         // middleware untuk minify html
    \zamcoder\Laravel9HtmlMinifier\Middleware\MinifyCss::class,         // middleware untuk minify css style
    \zamcoder\Laravel9HtmlMinifier\Middleware\MinifyJavascript::class, // middleware untuk minify kode javascript
];

中间件信息

\zamcoder\Laravel9HtmlMinifier\Middleware\MinifyHtml::class

MinifyHtml::class 的作用是压缩 HTML,删除空白空格和换行符,使它们变为一行。

示例输出

  • 压缩前
<html lang="id">
    <head>
        <title>Laravel 9 Html Minifier</title>
    </head>
    <body>
       <h1>Laravel 9 Html Minifier</h1>
    </body>
</html>
  • 压缩后
<html lang="id"><head><title>Laravel 9 Html Minifier</title></head><body><h1>Laravel 9 Html Minifier</h1></body></html>
\zamcoder\Laravel9HtmlMinifier\Middleware\MinifyCss::class

MinifyCss::class 的作用是压缩 CSS 样式,删除空白空格和换行符,使它们变为一行。

示例输出

  • 压缩前
body {
   background-color: salmon;
   width: 100%;
   height: 100%;
}
  • 压缩后
body{background-color:salmon;width:100%;height:100%}
\zamcoder\Laravel9HtmlMinifier\Middleware\MinifyJavascript::class

MinifyJavascript::class 的作用是压缩 JavaScript 代码,删除空白空格和换行符,使它们变为一行。

注意:不要使用没有括号({})的 if、elseif、else、while、for 等。这将导致您的代码出现错误,例如

  • 推荐代码
for (let i = 0; i < 10; i++) {
  console.log('hello dunia');
}
  • 不推荐的代码,没有括号在调用 MinifyJavascript::class 时通常会导致错误
for (let i = 0; i < 10; i++)    // tanpa
    console.log('hello dunia'); // kurung kurawal
  • 压缩后
for (let i = 0; i < 10; i++){console.log('hello dunia')}

您还可以通过将 "obfuscate_javascript" 中的值设置为 true 来混淆 JavaScript 代码:[配置文件](https://github.com/zamcoder/laravel9-html-minifier/blob/HEAD/config/laravel-html-minifier.php)

配置文件

安装包后,您可能需要配置一些选项。请进入文件 [config/laravel-html-minifier.php](https://github.com/zamcoder/laravel9-html-minifier/blob/HEAD/config/laravel-html-minifier.php) 来更改配置

禁用服务

您只需将其设置为 false 以禁用服务。

// file: config/laravel-html-minifier.php

// setel bagian ini ke false untuk menonaktifkan layanan minify Laravel.
"enable" => env("LARAVEL_HTML_MINIFIER_ENABLE", true),
自动在 CSS 代码末尾添加分号或逗号

如果您的 CSS 代码在调用 MinifyCss::class 时出现错误,请将此字段设置为 false

// file: config/laravel-html-minifier.php

"css_automatic_insert_semicolon" => env("LARAVEL_HTML_MINIFIER_CSS_AUTOMATIC_INSERT_SEMICOLON", true),
自动在 JavaScript 代码末尾添加分号或逗号

注意:不要在 while、do while、for、if、elseif、else、return 等中使用换行符或无括号代码({})。例如

  • 推荐代码
var log = function(log) {
   return console.log(log);
}

let i = 0;

do {
    if (i == 5) {
       break;
    }
    i++;
    log("hello dunia");
} while (true);
  • 不推荐的代码,如果在启用 "js_automatic_insert_semicolon" 时使用,将导致错误
var log = function(log) {
   return               // jeda
      console.log(log); // baris
}

let i = 0;

do
// jeda baris
{
    if (i == 5)  // tanpa
        break;   // kurung kurawal
    i++;
    log("hello dunia");
}
// jeda baris
while (true);

如果激活此字段,您的代码可能会因为某些错误条件而出现bug。如果发生这种情况,请将此字段设置为false

请始终在JavaScript代码中使用逗号,如果此字段设置为false

此功能仅在使用MinifyJavascript::class时有效。

// file: config/laravel-html-minifier.php

"js_automatic_insert_semicolon" => env("LARAVEL_HTML_MINIFIER_JS_AUTOMATIC_INSERT_SEMICOLON", true),
删除HTML注释

只需将其设置为true以激活,设置为false以禁用。

此功能仅在使用Middleware MinifyHtml::class时有效。

// file: config/laravel-html-minifier.php

// setel bidang ini ke false untuk mematikan
"remove_comments" => env("LARAVEL_HTML_MINIFIER_REMOVE_COMMENTS", true),
混淆JavaScript代码(Obfuscate)

注意:如果激活此功能,您的JavaScript代码可能会变得很长。此功能会将每个字符串/文本转换为PHP的chr()函数,并通过JavaScript的String.fromCharCode()函数解码。

此功能仅在您使用Middleware MinifyJavascript::class且此字段设置为false时有效,此时JavaScript仅被minify,而不是被混淆/Obfuscate。

示例输出

  • 在混淆之前
alert(1);
  • 在混淆之后
eval(((_,__,___,____,_____,______,_______)=>{______[___](x=>_______[__](String[____](x)));return _______[_](_____)})('join','push','forEach','fromCharCode','',[97,108,101,114,116,40,49,41,59],[]))

在这种情况下,只需将其设置为false以禁用,设置为true以激活。

// file : config/laravel-html-minifier.php

// setel ke true untuk mengaktifkan
"obfuscate_javascript" => env("LARAVEL_HTML_MINIFIER_OBFUSCATE_JS", false),
忽略/放弃路由

您可能想配置包以跳过一些路由。

// file : config/laravel-html-minifier.php

"ignore" => [
    "*/download/*", // Abaikan semua route yang mengandung download
    "admin/*",     // Abaikan semua route dengan awalan admin,
    "*/user"      // Abaikan route dengan akhiran user
]

通过添加属性ignore--minify来跳过

您只需在script/style标签中添加属性ignore--minify即可跳过minify过程。

示例

<style ignore--minify>
    /* css kode */
</style>

<script ignore--minify>
   /* javascript kode */
</script>

具有属性ignore--minify的每个style/script标签都会被跳过,不会进行minify。

通过向视图中添加数据“ignore_minify”来跳过视图

您还可以通过在视图中添加数据"ignore_minify"来跳过minify。

示例

// View ini tidak diminify akan di skip.
return view("welcome", ["ignore_minify" => true]);

许可证

MIT (MIT)