fahlisaputra/laravel-minify

为 Laravel 6, 7, 8, 9 和 10 动态压缩 blade 视图、html、css 和 js 文件

v1.1.5 2024-03-14 02:52 UTC

This package is auto-updated.

Last update: 2024-09-14 03:56:58 UTC


README

Logo

Laravel 压缩包

Laravel 压缩包是一个用于压缩和混淆 JavaScript、CSS、HTML 和 Blade 视图的包。当您加载页面或视图时,它将自动运行。提高页面加载性能并节省带宽。混淆您的 JavaScript 以保护代码不被盗用。

Latest Stable Version Total Downloads License StyleCI

比较

此图显示了 Laravel 默认 welcome.blade.php 的原始文件和压缩文件的大小差异。原始文件大小为 28.7 KB,压缩文件大小为 25.7 KB。压缩文件大小比原始文件小 10%。

Logo

如果您压缩所有资产文件,您可以节省高达 50% 的带宽。这将使您的网站加载速度更快,并节省您的托管成本。当您有大型文件时,大小的差异将更大。

安装

Minify for Laravel 需要 PHP 7.2 或更高版本。这个特定版本支持 Laravel 8.x、9.x、10.x 和 11.x。

要获取最新版本,只需使用 Composer 引入项目。

composer require fahlisaputra/laravel-minify

配置

Minify for Laravel 支持可选配置。要开始,您需要发布所有供应商资产

php artisan vendor:publish --provider="Fahlisaputra\Minify\MinifyServiceProvider"

这将在您的 app 中创建一个 config/minify.php 文件,您可以根据需要修改它来设置配置。同时,确保检查该包中原始配置文件在版本之间的更改。

注册中间件(Laravel 10 或更早版本)

为了使 Minify for Laravel 能够拦截您的请求以进行压缩和混淆,您需要在 app/Http/Kernel.php 文件中添加 Minify 中间件

protected $middleware = [
    ....
    // Middleware to minify CSS
    \Fahlisaputra\Minify\Middleware\MinifyCss::class,
    // Middleware to minify Javascript
    \Fahlisaputra\Minify\Middleware\MinifyJavascript::class,
    // Middleware to minify Blade
    \Fahlisaputra\Minify\Middleware\MinifyHtml::class,
];

您可以选择使用哪种中间件。如果您想同时压缩 html、css 和 JavaScript,请将所有中间件放入其中。

注册中间件(Laravel 11 或更新版本)

为了使 Minify for Laravel 能够拦截您的请求以进行压缩和混淆,您需要在 bootstrap/app.php 文件中添加 Minify 中间件

->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: [
        \Fahlisaputra\Minify\Middleware\MinifyHtml::class,
        \Fahlisaputra\Minify\Middleware\MinifyCss::class,
        \Fahlisaputra\Minify\Middleware\MinifyJavascript::class,
    ]);
})

用法

这是如何在您的项目中使用 Minify for Laravel 的方法。

压缩资产文件

您必须在 config/minify.php 文件中将 assets_enabled 设置为 true 以压缩您的资产文件。例如

"assets_enabled" => env("MINIFY_ASSETS_ENABLED", true),

您可以通过使用 minify() 辅助函数来压缩您的资产文件。此函数将压缩您的资产文件并返回压缩后的路由。为了正常工作,您需要将您的资产文件放在 resources/jsresources/css 目录中。例如

<link rel="stylesheet" href="{{ minify('/css/test.css') }}">

其中 test.css 位于 resources/css 目录中。

<script src="{{ minify('/js/test.js') }}"></script>

其中 test.js 位于 resources/js 目录中。

在 JavaScript 或 CSS 中自动插入分号

如果您发现 Minify for Laravel 使您的 JavaScript 或 CSS 无法正常工作,请使用此选项。您可以通过在 config/minify.php 文件中将 insert_semicolon 设置为 true 来在 JavaScript 或 CSS 中启用自动插入分号。例如

"insert_semicolon" => [
    'css' => env("MINIFY_CSS_SEMICOLON", true),
    'js' => env("MINIFY_JS_SEMICOLON", true),
],

注意:此选项为实验性。如果代码仍然不能正常工作,您可以禁用此选项,并在您的JavaScript或CSS代码中手动添加分号。

跳过Blade的压缩

您可以通过在script或style标签内使用属性ignore--minify来跳过Blade的压缩。例如

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

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

渲染视图时跳过压缩

您可以通过在视图数据中传递ignore_minify = true来跳过渲染视图时的压缩。例如

return view('welcome', ['ignore_minify' => true]);

通过路由跳过压缩

您可以通过在config/minify.php文件中将路由名称添加到ignore数组中来通过路由跳过压缩。例如

"ignore" => [
    '/admin'
],

自定义指令替换

您可以通过在config/minify.php文件中将指令名称添加到directives数组中来替换自定义指令。例如在AlpineJS中,您可以写@click="function()"。不幸的是,Laravel的压缩会移除@符号。您可以通过将@ => x-on:添加到directives数组中来替换它。例如

"directives" => [
    '@' => 'x-on:',
],

保留指令

您可以通过在config/minify.php文件中将指令名称添加到keep_directives数组中来保留指令。例如当您使用@vite时,您可以添加@vitekeep_directives数组。例如

"keep_directives" => [
    '@vite'
],

已知问题

  • Laravel的压缩会移除blade文件中的@符号。这将导致blade指令不能正常工作。您可以通过在config/minify.php文件中将@ => x-on:添加到directives数组中来自定义修复此问题。
  • 不支持某些JavaScript框架。您可以在config/minify.php文件中将insert_semicolon选项更改为truefalse来尝试实验。

贡献

如果您发现了一个问题,或者有更好的方法来做某件事,请随时提交一个问题,或者一个拉取请求。这个包还远非完美,任何帮助都是受欢迎的。没有正式的贡献指南,也没有贡献太小的问题。所有代码风格将在通过StyleCI的拉取请求期间得到修复。所以,不要过于担心代码风格。我们很高兴听到您的意见!

感谢

非常感谢为这个包做出贡献的人

许可证

Laravel Minify遵循MIT许可证

支持

如果您对这个包有任何一般性问题,请随时通过saputra@fahli.net联系我们

报告漏洞

有关更多详细信息,请阅读我们的安全策略