samuell / cdn-plugin
推送、同步、清除并从CDN服务资产,或者从webpack或laravel-mix包含清单文件。
Requires
- php: >=7.3
- composer/installers: ~1.0
This package is auto-updated.
Last update: 2024-09-25 20:52:59 UTC
README
推送、同步、清除并从/到CDN服务资产,或用于从webpack或laravel-mix包含清单文件。
https://octobercms.com/plugin/samuell-cdn
使用方法
在您的主题中,将资产链接更改为使用 asset_cdn 函数。
示例
<link rel="stylesheet" href="{{ asset_cdn('assets/css/app.css') }}"> <script src="{{ asset_cdn('assets/js/app.js') }}"></script>
注意:如果您不希望使用CDN,可以在配置中禁用cdn,它将自动回退到主题路径并使用主题文件。 (这是默认配置)
启用清单集成
我们定义了由Webpack或LaravelMix编译的文件名,并且存在于 manifest.json 文件中。不要忘记启用清单集成并在配置文件中定义正确的 manifest.json 路径。
<link rel="stylesheet" href="{{ asset_cdn('app.css') }}">
获取不在 manifest.json 文件中的cdn资产,请使用带有文件完整路径的 cdn 函数
<link rel="stylesheet" href="{{ cdn('assets/css/app.css') }}">
配置后(以下为配置步骤),我们可以同步主题资产到cdn
根据主题运行命令以同步特定主题。例如,要同步名为 demo 的主题,我们使用 php artisan cdn:sync demo。如果您想删除与本地副本相比的旧文件,可以使用标志 --delete-old
配置
1. 配置文件系统
如果您计划使用CDN,可以使用此配置。如果不使用,可以跳过此步骤。示例为AWS S3与Cloudfront。
config/filesystems.php
'asset-cdn' => [ 'driver' => 's3', 'key' => env('S3_KEY'), 'secret' => env('S3_SECRET'), 'region' => env('S3_REGION'), 'bucket' => env('S3_BUCKET'), 'root' => 'assets/', ],
2. 配置配置
在 config 文件夹中创建 cdn.php 文件以配置cdn插件,这允许为开发或本地环境使用不同的配置。
不要忘记将 root 文件系统文件夹定义为与 assetsFolder 相同,最佳做法是使用默认值 assets 以匹配october默认主题资产文件夹。
config/cdn.php
return [ // CDN integration 'active' => false, 'url' => 'https://cdn.mydomain.com/', 'assetsFolder' => '/assets/', // Manifest integration (webpack, laravel mix) 'useManifest' => false, 'manifestPath' => '/assets/compiled/manifest.json', // Filesystem information that will be used with sync, push, clear commands 'filesystem' => [ 'disk' => 'asset-cdn', 'options' => [] ] // Files filter 'files' => [ 'ignoreDotFiles' => true, 'ignoreVCS' => true, 'include' => [ 'paths' => [ // ], 'files' => [ // ], 'extensions' => [ // ], 'patterns' => [ // ], ], 'exclude' => [ 'paths' => [ // ], 'files' => [ // ], 'extensions' => [ // ], 'patterns' => [ // ], ], ], ];
可选的文件系统选项
文件系统允许定义自定义选项。以下示例适用于AWS S3。
cdn.php > filesystem.options
'options' => [ 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000, public' ]
命令
同步资产
同步所有资产,但删除CDN上的旧文件。
php artisan cdn:sync {theme} {--delete-old}
- 启用
delete-old选项可自动删除本地文件夹中不存在的旧文件
推送资产
推送资产但不删除CDN上的旧文件。
php artisan cdn:push {theme}
从CDN删除所有资产
从CDN删除所有资产。
php artisan cdn:clear {theme}
Twig函数
- 将
'path'|theme替换为asset_cdn('path')(如果配置中将 useManifest 设置为true,则它可以读取manifest.json文件)。 - 将任何即将从资产主题目录中出来的或未在清单中使用的资产替换为
cdn('path')。
灵感来自Laravel的AsssetCDN包 https://github.com/arubacao/asset-cdn