ianvizarra / cachebuster
我为 laravel 6 和 7 支持进行了分支操作:将 MD5 哈希添加到应用程序资源的 URL 中,当它们发生变化时,URL 也会随之改变。
Requires
- php: >=5.4.0
- illuminate/support: 4.*|5.*
- symfony/http-kernel: 2.*|3.*|4.*
This package is auto-updated.
Last update: 2021-08-10 23:31:03 UTC
README
Laravel Cachebuster
将 MD5 哈希添加到应用程序资源的 URL 中,当它们发生变化时,URL 也会随之改变。CSS 文件中包含的 URL 将自动转换;其他 URL(例如通过 <script>
、<link>
和 <img>
标签引用的 URL)也可以通过 blade 模板中的辅助函数轻松转换。
同时支持向资产 URL 添加 CDN 代理前缀,以便快速轻松地将透明 CDN(如 Cloudfront)的性能和可伸缩性添加到您的应用程序中。
安装
要获取与您版本 laravel 兼容的 cachebuster 版本,请遵循以下有关安装的说明
- 将以下内容添加到您的 composer.json
对于 Laravel 5.x
"themonkeys/cachebuster" :"2.*"
对于 Laravel 4.x
"themonkeys/cachebuster" :"1.*"
注意:为了继续支持 Laravel 4,请使用 cachebuster 1.x 版本,而不是 dev-master*
-
运行
composer update
-
一旦安装了 cachebuster,您需要将服务提供者注册到应用程序中。打开
app/config/app.php
并找到providers
键。
'providers' => array( 'Themonkeys\Cachebuster\CachebusterServiceProvider', )
- 该包附带一个门面,它提供了一种简洁的静态语法来编码您的 URL。您可以通过
app/config/app.php
文件的aliases
键来注册门面。
'aliases' => array( 'Bust' => 'Themonkeys\Cachebuster\Cachebuster' )
- 将以下内容添加到您的 .htaccess 文件中 在 Laravel 重写规则之前
# ------------------------------------------------------------------------------ # | Remove cachebuster hash from request URLs if present | # ------------------------------------------------------------------------------ <IfModule mod_rewrite.c> RewriteRule ^(.*)-[0-9a-f]{32}(\.(.*))$ $1$2 [DPI] </IfModule>
注意:如果您使用 NGINX 并且不解析
.htaccess
文件,请参阅 @RTC1 的以下 gist,以获取等效的 NGINX 重写规则:此 gist。
并在您的 .htaccess 文件中 在 Laravel 重写规则之后添加以下内容
# ------------------------------------------------------------------------------ # | Allow Laravel to pre-process the css to add cachebusters to image urls | # ------------------------------------------------------------------------------ <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} !^/index.php RewriteRule ^(.*\.css)$ index.php [L] </IfModule>
- 最后,将以下内容添加到您的
app/routes.php
文件中
Route::get('{path}', function($filename) { return Bust::css($filename); })->where('path', '.*\.css$'); App::make('cachebuster.StripSessionCookiesFilter')->addPattern('|\.css$|');
注意:此通配符路由与 croppa 使用的通配符路由冲突,从而使 Croppa 无效。如果这影响您,只需使 CSS 路由更具体即可。例如,如果您的所有 CSS 文件都在
css/
文件夹中Route::get('/css/{path}', function($filename) { return Bust::css("/css/$filename"); })->where('path', '.*\.css$');
或者您甚至可以在过滤器中使用
Bust::css()
。
配置
要配置此包,您可以使用以下命令将配置文件发布到 app/config/
。
Laravel 5.x
php artisan vendor:publish
将发布到:/app/config/cachebuster.php
。
设置本身在 /app/config/cachebuster.php
中进行了文档说明。您也可以在此处更改默认设置,以便在环境变量未检测到时使用。
注意: Laravel 5.x 将环境配置更改为使用 dotEnv 文件,您需要使用 dotEnv 模式为应用程序所需的每个环境“启用”cachebuster。
例如,要启用 cachebuster,打开您的 .env
文件,并添加以下行
CACHEBUSTER_ENABLED = true
Laravel 4.x
php artisan config:publish themonkeys/cachebuster
将发布到: app/config/packages/themonkeys/cachebuster
。
或者您可以在该文件夹中创建一个新文件,只需覆盖您需要的设置。设置本身在 app/config/packages/themonkeys/cachebuster/config.php
中有文档说明。
使用Laravel内置的开发服务器
您可能想使用Laravel内置的开发服务器来提供应用程序,例如用于自动化测试。由于该服务器不支持必要的URL重写,最简单的解决方案是禁用该环境的缓存破坏功能。通过创建文件 app/config/packages/themonkeys/cachebuster/testing/config.php
来实现此目的(用开发服务器使用的环境名称替换 testing
),文件内容如下
<?php
return array(
'enabled' => false,
);
如果您仍然想在开发服务器下启用缓存破坏,可以使用[这个代码片段] (https://gist.github.com/felthy/3fc1675a6a89db891396)中的代码。感谢RTC1提供了这个代码片段的原始代码。
用法
无论您在哪里指定blade模板中的资产路径,都使用 Bust::url()
来转换路径。例如,这样的脚本标签...
<script src="{{ Bust::url('/js/main.js') }}"></script>
...对您的用户来说会是这样
<script src="/js/main-a09b64644df96f807a0db134d27912bf.js"></script>
如果您已配置了CDN,它可能看起来像这样
<script src="//a1bc23de4fgh5i.cloudfront.net/js/main-a09b64644df96f807a0db134d27912bf.js"></script>
对于 <img>
标签也是如此
<img src="{{ Bust::url('/img/spacer.gif') }}" alt="">
对您的用户来说会是这样
<img src="/img/spacer-5e416a75e3af86e42b1a3bc8efc33ebc.gif" alt="">
最后一步是您的CSS
<link rel="stylesheet" href="{{ Bust::url('/css/main.css') }}">
看起来像这样
<link rel="stylesheet" href="/css/main-f75168d5f53c7a09d9a08840d7b5a5ec.css">
这里发生了一些真正的魔法 - CSS文件中的所有URL(图片、字体等)都自动通过缓存破坏器传递,因此它们的文件名中也有哈希。在浏览器中打开CSS文件查看一下!
绝对URL
有时您可能想指定一个绝对URL,例如在OpenGraph元标签中。这很简单
<meta property="og:image" content="{{ Bust::url('/img/share-thumbnail.jpg', true) }}" />
可能看起来像这样
<meta property="og:image" content="http://yourhost/img/share-thumbnail-2a7d7b5a4401ef3176565dffcd59b282.png" />
这使用了Laravel内置的URL生成器,因此URL将根据您的环境生成。
贡献
没有正式的风格指南,请务必维护现有的编码风格。
许可证
MIT许可证(c) The Monkeys