clubstudioltd / craft-asset-rev
一个辅助缓存更新的插件
Requires
- php: ^8.2
- craftcms/cms: ^5.0
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/php-token-stream: <2
- phpunit/phpunit: ^9.0
README
CraftCMS 资产重命名 / 缓存清除
寻找 Craft 2 支持? Craft 2 的资产重命名
CraftCMS 的一个 Twig 扩展,帮助您使用可配置策略缓存清除您的资产。
为什么?
为了加快您页面的加载时间,您可以在您的图片、样式表和脚本上设置一个远期过期头。然而,当您更新这些资产时,您需要更新它们的文件名以强制浏览器下载更新版本。
使用清单文件是推荐的方法 - 您可以在此处了解为什么使用查询字符串不是理想的选择 这里。
策略
此插件允许您为您的资产文件名配置多个缓存清除策略。该插件自带三种策略
清单文件
css/main.css
将被替换为在您的资产清单 .json
文件中定义的相应哈希文件名。
如果您的清单文件内容是...
{ "css/main.css": "css/main.a9961d38.css", "js/main.js": "js/main.786087f5.js" }
那么 rev('css/main.css')
将展开为 css/main.a9961d38.css
。
请注意:此插件 不会 创建清单文件;相反,它们应该在构建过程中使用 Gulp Rev、Laravel Mix 或其他类似工具生成。
查询字符串
根据文件最后修改时间添加一个查询字符串到文件中。例如: rev('css/main.css')
将展开为类似于 css/main.css?1473534554
的内容。
透明传输
返回原始文件名,不进行修改。如果所有其他缓存清除策略都失败,这很有用。
策略管道
管道允许您按顺序尝试多个缓存清除策略。如果某个策略失败,则插件可以继续尝试使用管道中的下一个策略来清除资产文件名。
默认管道是 manifest|querystring|passthrough
,将
- 尝试使用
ManifestFileStrategy
。如果无法使用,因为清单文件不存在,它将抛出一个ContinueException
,将缓存清除推迟到管道中的下一个策略... - 尝试使用
QueryStringStrategy
。如果无法使用,因为找不到资产文件,它将抛出另一个ContinueException
,将缓存清除推迟到管道中的最终默认策略... - 使用基于闭包的透明传输策略返回原始文件名。
需要提供自己的缓存清除逻辑? 简单地创建自己的 Strategy 类实现或定义配置文件中的 Closure。
安装
通过 Craft 3 安装中的插件商店或使用 Composer 安装: composer require clubstudioltd/craft-asset-rev
配置
该插件附带一个 config.php
文件,其中定义了一些合理的默认值。
如果您想设置自己的值,您应该在 Craft 配置目录中创建一个 assetrev.php
文件。此文件的 内容将与插件默认值合并,因此您只需指定要覆盖的设置值。
策略
strategies
是您定义想要尝试修改资产文件名的策略的地方。您可以提供实现 StrategyContact
的类的名称或自定义闭包。默认设置应该满足大多数需求。
管道
pipeline
允许您设置在修改资产文件名时想要尝试配置的策略的顺序。默认值:manifest|querystring|passthrough
应该适用于大多数用例。
清单路径
manifestPath
是 Craft 应该查找您的清单文件的位置。非绝对路径将是相对于 Craft 安装的基础路径(CRAFT_BASE_PATH
设置的内容)。
资产基础路径
assetsBasePath
是您的资产的基准路径。同样,这也是相对于您的 craft 基础目录,除非您提供了一个绝对目录路径。
资产 URL 前缀
assetUrlPrefix
将被添加到 rev()
输出的前面。
注意:您可以在配置值中使用 Yii 别名。
示例配置文件
<?php return array( '*' => array( 'strategies' => [ 'manifest' => \club\assetrev\utilities\strategies\ManifestFileStrategy::class, 'querystring' => \club\assetrev\utilities\strategies\QueryStringStrategy::class, 'passthrough' => function ($filename, $config) { return $filename; }, ], 'pipeline' => 'manifest|querystring|passthrough', 'manifestPath' => 'resources/assets/assets.json', 'assetsBasePath' => '../public/build/', 'assetUrlPrefix' => '@web/assets', ), );
用法
一旦激活并配置,您可以在模板中使用 rev()
函数。
<link rel="stylesheet" href="{{ rev('css/main.css') }}">
自定义策略
需要提供自己的缓存破坏逻辑?创建您自己的策略类或简单使用闭包。
示例策略类
<?php namespace your\namespace; use club\assetrev\utilities\Strategy; use club\assetrev\exceptions\ContinueException; class QueryStringStrategy extends Strategy { public function rev($filename) { // add your logic to manipulate $filename here... return $filename; } }
示例闭包
您的函数将能够访问资产文件名和插件配置数组。
function ($filename, $config) { // add your logic to manipulate $filename here... return $filename; }