mehedi / 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上访问的 paths。
以下示例将匹配在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上访问的 files。
以下示例将匹配在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上访问的 filetypes。
以下示例将匹配在public
目录中以*.css
或*.js
为类型的 任何 文件。'include' => [ 'extensions' => [ '*.js', '*.css', ], ],
-
patterns
为应可在CDN上访问的文件定义 patterns。
以下示例将匹配在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
直接传递给 文件系统,该文件系统最终调用底层的存储驱动程序,例如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