fahlisaputra / laravel-minify
为 Laravel 6, 7, 8, 9 和 10 动态压缩 blade 视图、html、css 和 js 文件
Requires
- php: ^7.2.5 || ^8.0 || ^8.1 || ^8.2 || ^8.3
- illuminate/http: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
- illuminate/support: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
- illuminate/view: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
README
Laravel 压缩包
Laravel 压缩包是一个用于压缩和混淆 JavaScript、CSS、HTML 和 Blade 视图的包。当您加载页面或视图时,它将自动运行。提高页面加载性能并节省带宽。混淆您的 JavaScript 以保护代码不被盗用。
比较
此图显示了 Laravel 默认 welcome.blade.php 的原始文件和压缩文件的大小差异。原始文件大小为 28.7 KB,压缩文件大小为 25.7 KB。压缩文件大小比原始文件小 10%。
如果您压缩所有资产文件,您可以节省高达 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/js
或 resources/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
时,您可以添加@vite
到keep_directives
数组。例如
"keep_directives" => [ '@vite' ],
已知问题
- Laravel的压缩会移除blade文件中的
@
符号。这将导致blade指令不能正常工作。您可以通过在config/minify.php
文件中将@ => x-on:
添加到directives
数组中来自定义修复此问题。 - 不支持某些JavaScript框架。您可以在
config/minify.php
文件中将insert_semicolon
选项更改为true
或false
来尝试实验。
贡献
如果您发现了一个问题,或者有更好的方法来做某件事,请随时提交一个问题,或者一个拉取请求。这个包还远非完美,任何帮助都是受欢迎的。没有正式的贡献指南,也没有贡献太小的问题。所有代码风格将在通过StyleCI的拉取请求期间得到修复。所以,不要过于担心代码风格。我们很高兴听到您的意见!
感谢
非常感谢为这个包做出贡献的人
许可证
Laravel Minify遵循MIT许可证。
支持
如果您对这个包有任何一般性问题,请随时通过saputra@fahli.net联系我们
报告漏洞
有关更多详细信息,请阅读我们的安全策略。