dz-id/laravel-html-minifier

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

dev-master 2021-07-10 18:53 UTC

This package is auto-updated.

Last update: 2024-09-11 02:01:29 UTC


README

Build Status Latest Stable Version Total Downloads License

Laravel Html Minifier

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

此工具仅在提供的输出是有效的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 dz-id/laravel-html-minifier

发布配置文件

php artisan vendor:publish --provider="DzId\LaravelHtmlMinifier\HtmlMinifierServiceProvider"

请务必将其注册到全局中间件中

\DzId\LaravelHtmlMinifier\Middleware\MinifyHtml::class和 Middleware其他必需的中间件需要注册到kernel中,例如

// file : app/Http/Karnel.php

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

中间件信息

\DzId\LaravelHtmlMinifier\Middleware\MinifyHtml::class

MinifyHtml::class的作用是压缩HTML,删除空白空间和换行符。

示例结果

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

MinifyCss::class的作用是压缩CSS样式,删除空白空间和换行符。

示例结果

  • 压缩前
body {
   background-color: salmon;
   width: 100%;
   height: 100%;
}
  • 压缩后
body{background-color:salmon;width:100%;height:100%}
\DzId\LaravelHtmlMinifier\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代码:config/laravel-html-minifier.php

配置文件

安装包后,您可能需要配置一些选项。请访问文件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时出现bug,请将此字段设置为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

如果此字段设置为false,则请务必在JavaScript代码中使用分号

此功能仅在使用 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 代码

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

此功能仅在您使用 Middleware MinifyJavascript::class 且此字段设置为 false 时有效。如果设置为 false,则 JavaScript 只会被压缩而不会被混淆/混淆

示例结果

  • 混淆前
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 以跳过压缩过程。

示例

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

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

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

通过在视图中添加数据 "ignore_minify" 跳过视图

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

示例

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

许可证

MIT (MIT)