clubstudioltd/craft-asset-rev

一个辅助缓存更新的插件

安装次数: 461,270

依赖者: 11

建议者: 0

安全性: 0

星级: 109

关注者: 3

分支: 7

类型:craft-plugin

8.0.0 2024-03-26 19:39 UTC

This package is auto-updated.

Last update: 2024-09-26 20:50:23 UTC


README

CraftCMS 资产重命名 / 缓存清除

tests Latest Stable Version Total Downloads Latest Unstable Version License

寻找 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 RevLaravel Mix 或其他类似工具生成。

查询字符串

根据文件最后修改时间添加一个查询字符串到文件中。例如: rev('css/main.css') 将展开为类似于 css/main.css?1473534554 的内容。

透明传输

返回原始文件名,不进行修改。如果所有其他缓存清除策略都失败,这很有用。

策略管道

管道允许您按顺序尝试多个缓存清除策略。如果某个策略失败,则插件可以继续尝试使用管道中的下一个策略来清除资产文件名。

默认管道是 manifest|querystring|passthrough,将

  1. 尝试使用 ManifestFileStrategy。如果无法使用,因为清单文件不存在,它将抛出一个 ContinueException,将缓存清除推迟到管道中的下一个策略...
  2. 尝试使用 QueryStringStrategy。如果无法使用,因为找不到资产文件,它将抛出另一个 ContinueException,将缓存清除推迟到管道中的最终默认策略...
  3. 使用基于闭包的透明传输策略返回原始文件名。

需要提供自己的缓存清除逻辑? 简单地创建自己的 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;
}