arubacao / asset-cdn
从内容分发网络(CDN)服务 Laravel 资产
Requires
- php: ^7.0|^8.0
- laravel/framework: ~5.4|^6.0|^7.0|^8.0
Requires (Dev)
- league/flysystem-aws-s3-v3: ^1.0
- mockery/mockery: ^1.0
- orchestra/testbench: ~3.4|^4.0|^5.0|^6.0
- phpunit/phpunit: ~5.7|~6.0|^7.0|^8.0
- spatie/temporary-directory: ^1.1
README
从内容分发网络(CDN)服务 Laravel 资产
简介
此包允许您将资产推送到/从您选择的 CDN(如 AWS Cloudfront)进行推送、同步、删除和提供服务。
它添加了辅助方法 mix_cdn()
和 asset_cdn()
。
简单说明
>>> env('USE_CDN') => true
$ php artisan asset-cdn:sync
// head.blade.php <link rel="stylesheet" href="{{ mix_cdn('/css/app.css') }}">
<!-- Result --> <link rel="stylesheet" href="https://cdn.mysite.com/css/app.css?id=081861342e950012abe3">
安装
使用 composer 安装此包
$ composer require arubacao/asset-cdn
同时注册服务提供者
仅在 Laravel <=5.4
时需要,对于 Laravel >=5.5
,已启用 自动发现。
// config/app.php 'providers' => [ // Other Service Providers \Arubacao\AssetCdn\AssetCdnServiceProvider::class, ],
注意
arubacao/asset-cdn
在 Laravel5.4
-8.*
上功能齐全且经过全面测试,PHP7.0
、7.1
、7.2
、7.3
、7.4
。
配置
1. 配置文件系统
如果您计划通过提供的命令(如 asset-cdn:push
、asset-cdn:sync
、asset-cdn:empty
)管理资产,则需要此配置。
arubacao/asset-cdn
使用 Laravel 的文件系统 来推送到/从 CDN 的资产。因此,您必须配置并定义一个特定于 CDN 的文件系统。请遵循官方文档。
如果您计划使用 AWS S3/Cloudfront,则可以使用此配置
// config/filesystem.php 'asset-cdn' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'bucket' => env('AWS_CDN_BUCKET'), ],
2. 发布配置文件
$ php artisan vendor:publish --provider="Arubacao\AssetCdn\AssetCdnServiceProvider"
3. 编辑 cdn_url
和 filesystem.disk
// config/asset-cdn.php [ 'cdn_url' => 'https://cdn.mysite.com', 'filesystem' => [ 'disk' => 'asset-cdn', ], ]
4. 编辑 config/asset-cdn.php
中的 files
如果您计划通过提供的命令(如 asset-cdn:push
、asset-cdn:sync
、asset-cdn:empty
)管理资产,则需要此配置。
files
始终假设从 public
目录的相对路径
-
ignoreDotFiles
排除“隐藏”目录和文件(以点开头)。 -
ignoreVCS
忽略版本控制目录。 -
include
任何匹配至少一个include
规则的文件都将被包括在内。默认情况下不包含任何文件。-
paths
定义应在 CDN 上可用的 路径。
以下示例将匹配 任何 在public
目录中找到的 任何js
或css
路径中的文件。'include' => [ 'paths' => [ 'js', 'css' ], ] /* * This config would try to find: * '/var/www/html/public/js' * '/var/www/html/public/css' * but also any other 'js' or 'css' path e.g. * '/var/www/html/public/vendor/js' * '/var/www/html/public/vendor/css' * You could explicitly exclude paths later */
-
files
定义应在 CDN 上可用的 文件。
以下示例将匹配public
目录中以js/back.app.js
开头的 任何 文件。'include' => [ 'files' => [ 'js/app.js', ], ], /* * This config would try to find: * '/var/www/html/public/js/app.js' * but also any other file that matches the path + filename e.g. * '/var/www/html/public/vendor/js/app.js' * You could explicitly exclude these files later */
-
extensions
定义应在 CDN 上可用的 文件类型。
以下示例将匹配public
目录中以*.css
或*.js
为类型的 任何 文件。'include' => [ 'extensions' => [ '*.js', '*.css', ], ],
-
patterns
定义应可在 CDN 上提供的文件的 模式。
以下示例将匹配public
目录中以字母a
或b
开头的 任何 文件。/* * Patterns can be globs, strings, or regexes */ 'include' => [ 'patterns' => [ '/^[a-b]/i', // starting with letters a-b ], ],
-
-
exclude
任何 匹配至少一个exclude
规则的文件都将被排除。被排除的文件将 永远不会 被包括,即使它们已被明确包括。规则与上述描述相同。
5. 为上传文件设置其他配置
filesystem.options
将直接传递给 Filesystem,它最终调用底层的存储驱动程序,例如 S3。
请参考相应的存储驱动程序文档以获取可用的配置选项。
以下示例适用于AWS S3。
// config/asset-cdn.php [ 'filesystem' => [ 'disk' => 'asset-cdn', 'options' => [ 'ACL' => 'public-read', // File is available to the public, independent of the S3 Bucket policy 'CacheControl' => 'max-age=31536000, public', // Sets HTTP Header 'cache-control'. The client should cache the file for max 1 year ], ], ]
6. 设置环境变量 USE_CDN
# .env USE_CDN=true # Enables asset-cdn USE_CDN=false # Disables asset-cdn (default)
用法
命令
推荐
同步配置中定义的资产到CDN。仅推送更改/新资产。在CDN上删除本地已删除的文件。
$ php artisan asset-cdn:sync
将配置中定义的资产推送到CDN。推送所有资产。不会在CDN上删除文件。
$ php artisan asset-cdn:push
从CDN删除所有资产,不受配置文件的影响。
$ php artisan asset-cdn:empty
服务资产
将 mix()
替换为 mix_cdn()
。
将 asset()
替换为 asset_cdn()
。
致谢
图标来自 www.flaticon.com
由 Vinelab 维护的git仓库,仅供参考
待办事项
- 视频教程:如何使用S3/Cloudfront
- 为
ignoreVCS
查找器配置编写测试 - 为
ignoreDotFiles
查找器配置编写测试 - 扩展
CombinedFinderTest