mobilefuse / cachebuster
为应用资源URL添加MD5散列,当资源发生变化时,其URL也会相应改变。
Requires
- php: >=5.4.0
- illuminate/support: 4.*|5.*
- symfony/http-kernel: 2.*|3.*
This package is auto-updated.
Last update: 2024-09-19 22:34:14 UTC
README
Laravel Cachebuster
为应用资源URL添加MD5散列,当资源发生变化时,其URL也会相应改变。CSS文件中的URL将自动转换;其他URL(例如通过 <script>
、<link>
和 <img>
标签引用的URL)也可以通过blade模板中的辅助函数轻松转换。
还支持将CDN代理前缀添加到资产URL中,以便快速轻松地为应用添加透明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提供的此代码片段,以获取等效的NGINX重写规则。
并将以下内容添加到您的 .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 已将环境配置更改为使用点Env文件,您需要为应用程序所需的环境使用点Env范式来“启用”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,
);
如果您仍然希望在开发服务器下启用缓存破坏,可以使用 [这个 gist] 中的代码(https://gist.github.com/felthy/3fc1675a6a89db891396)。感谢 RTC1 提供的原始代码,该 gist 基于此代码。
用法
在您 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