themonkeys/cachebuster

此包已被废弃且不再维护。未建议替代包。

为应用程序资源文件的URL添加MD5哈希值,以便在它们更改时,它们的URL也会更改。

v2.0.4 2018-09-17 15:38 UTC

This package is not auto-updated.

Last update: 2023-02-18 05:48:43 UTC


README

The Monkeys

Laravel Cachebuster

为应用程序资源文件的URL添加MD5哈希值,以便在它们更改时,它们的URL也会更改。CSS文件中的URL会自动转换;其他URL(例如通过 <script><link><img> 标签引用的URL)也可以通过blade模板中的辅助函数轻松转换。

还支持将CDN代理前缀添加到您的资源URL中,以便快速轻松地将透明CDN(如Cloudfront)的性能和可扩展性添加到您的应用程序中。

安装

要获取与您的Laravel版本兼容的cachebuster版本,请遵循以下有关安装的说明

  1. 将以下内容添加到您的 composer.json

对于Laravel 5.x

"themonkeys/cachebuster" :"2.*"

对于Laravel 4.x

"themonkeys/cachebuster" :"1.*"

注意:为了继续支持Laravel 4,请使用cachebuster 1.x版本,而不是dev-master*。

  1. 运行 composer update

  2. 安装cachebuster后,您需要将服务提供者注册到应用程序中。打开 app/config/app.php 并找到 providers 键。

'providers' => array(
    'Themonkeys\Cachebuster\CachebusterServiceProvider',
)
  1. 该包包含一个门面,它提供了编码URL的简洁静态语法。您可以通过 app/config/app.php 文件的 aliases 键注册门面。
'aliases' => array(
    'Bust' => 'Themonkeys\Cachebuster\Cachebuster'
)
  1. 在Laravel重写规则之前将以下内容添加到您的 .htaccess 文件中 之前
# ------------------------------------------------------------------------------
# | 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重写规则。

在Laravel重写规则之后将以下内容添加到您的 .htaccess 文件中 之后

# ------------------------------------------------------------------------------
# | 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>
  1. 最后,将以下内容添加到您的 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 文件模式为每个应用程序所需的环境“启用”缓存破坏者。

例如,要启用缓存破坏者,打开您的 .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