kiranajudiya / laravel-cdn
为 Laravel 的内容分发网络 (CDN) 包
Requires
- php: ^7.2.5
- ext-json: *
- aws/aws-sdk-php: ~3.0
- illuminate/config: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|6.*|7.*|8.*
- illuminate/support: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|6.*|7.*|8.*
- symfony/console: 2.*|3.*|4.*|5.*
- symfony/finder: 2.*|3.*|4.*|5.*
Requires (Dev)
- orchestra/testbench: ~3.8.0|^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.5.8|^9.3.3
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-07 09:59:45 UTC
README
Laravel8 CDN 资产管理器
为 Laravel8 的内容分发网络 (CDN) 包
此包允许开发人员使用单个 artisan 命令将他们的资产(或任何公共文件)上传到 CDN。然后它允许他们在文件的本地和在线版本之间切换。
从 vipertecpro/laravelcdn6 分支
该项目已从 https://github.com/vipertecpro/laravelcdn6 分支。所有原始工作的信用都归那里。
Laravel 7/8 支持
- Laravel 7/8 支持,包括包自动发现。
亮点
- Amazon Web Services (AWS) - S3
- DigitalOcean (DO) - Spaces
- 用于上传内容到 CDN 的 artisan 命令
- 用于访问 CDN 资产的简单 Facade
安装
通过 Composer
在您的项目中要求 kiranajudiya/laravel-cdn
composer require kiranajudiya/laravel-cdn
如果您正在使用 Laravel 5.4 或更低版本,您需要注册服务提供程序
Laravel 5.4 及以下:将服务提供程序和 Facade 添加到 config/app.php
'providers' => array( //... KiranAjudiya\laravelCDN\CdnServiceProvider::class, ),
'aliases' => array( //... 'CDN' => KiranAjudiya\laravelCDN\Facades\CdnFacadeAccessor::class ),
如果您正在使用 Laravel 5.5,则无需注册服务提供程序,因为此包是自动发现的。
发布包配置文件
php artisan vendor:publish --provider 'KiranAjudiya\laravelCDN\CdnServiceProvider'
环境配置
可以通过编辑 config/app.php 文件来配置此包。或者,您也可以在 '.env' 文件中将许多选项设置为环境变量。
AWS 凭据
在 .env
文件中设置您的 AWS 凭据和其他设置。
注意:您应该在项目根目录中始终有一个 .env
文件,以保存您的敏感信息。此文件通常不应提交到您的 VCS。
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY=
CDN URL
设置 CDN URL
'url' => env('CDN_Url', 'https://s3.amazonaws.com'),
这可以在您的 '.env' 文件中按如下方式更改:
CDN_Url=
绕过
要加载您的本地资产进行测试或开发,请将 bypass
选项设置为 true
'bypass' => env('CDN_Bypass', false),
这可以在您的 '.env' 文件中按如下方式更改:
CDN_Bypass=
Cloudfront 支持
'cloudfront' => [ 'use' => env('CDN_UseCloudFront', false), 'cdn_url' => env('CDN_CloudFrontUrl', false) ],
这可以在您的 '.env' 文件中按如下方式更改:
CDN_UseCloudFront= CDN_CloudFrontUrl=
默认 CDN 提供商
目前,唯一可用的 CDN 提供商是 AwsS3。虽然 DigitalOcean 本身支持 AWS API,但您可以通过提供端点来利用它,有关更多信息,请参阅 cdn.php 配置。此选项不能在 '.env' 中设置。
'default' => 'AwsS3',
CDN 提供商配置
'aws' => [ 's3' => [ 'version' => 'latest', 'region' => '', 'endpoint' => '', // For DO Spaces 'buckets' => [ 'my-backup-bucket' => '*', ] ] ],
多个存储桶
'buckets' => [ 'my-default-bucket' => '*', // 'js-bucket' => ['public/js'], // 'css-bucket' => ['public/css'], // ... ]
文件 & 目录
包含
指定要上传的目录、扩展名、文件和模式。
'include' => [ 'directories' => ['public/dist'], 'extensions' => ['.js', '.css', '.yxz'], 'patterns' => ['**/*.coffee'], ],
排除
指定要忽略的内容。
'exclude' => [ 'directories' => ['public/uploads'], 'files' => [''], 'extensions' => ['.TODO', '.txt'], 'patterns' => ['src/*', '.idea/*'], 'hidden' => true, // ignore hidden files ],
其他配置
'acl' => 'public-read', 'metadata' => [ ], 'expires' => gmdate("D, d M Y H:i:s T", strtotime("+5 years")), 'cache-control' => 'max-age=2628000',
您始终可以参考 AWS S3 文档以获取更多信息: aws-sdk-php
用法
您可以使用以下命令将您的资产推送到 CDN,也可以清空您的资产。
推送到
只有更改过的资产会被推送到 CDN。(感谢 )
上传资产到 CDN
php artisan cdn:push
您可以在 cdn.php 配置文件中指定文件夹上传前缀。您的资产将被上传到 S3 上的该文件夹。
加载资产
使用 Facade CDN
调用 CDN::asset()
函数。
注意:此处的asset
与Laravel 8中的asset
功能相同,它开始从public/
目录中查找资源
{{CDN::asset('assets/js/main.js')}} // example result: https://js-bucket.s3.amazonaws.com/public/assets/js/main.js {{CDN::asset('assets/css/style.css')}} // example result: https://css-bucket.s3.amazonaws.com/public/assets/css/style.css
注意:此处的elixir
与Laravel 8中的elixir
功能相同,它从构建目录中加载manifest.json文件,并选择由gulp生成的正确文件版本
{{CDN::elixir('assets/js/main.js')}} // example result: https://js-bucket.s3.amazonaws.com/public/build/assets/js/main-85cafe36ff.js {{CDN::elixir('assets/css/style.css')}} // example result: https://css-bucket.s3.amazonaws.com/public/build/assets/css/style-2d558139f2.css
注意:此处的mix
与Laravel 8中的mix
功能相同,它从public目录中加载mix-manifest.json文件,并选择由webpack生成的正确文件版本
{{CDN::mix('/js/main.js')}} // example result: https://js-bucket.s3.amazonaws.com/public/js/main-85cafe36ff.js {{CDN::mix('/css/style.css')}} // example result: https://css-bucket.s3.amazonaws.com/public/css/style-2d558139f2.css
要使用public/
目录外部的文件,在app/
目录中的任何地方使用CDN::path()
函数
{{CDN::path('private/something/file.txt')}} // example result: https://css-bucket.s3.amazonaws.com/private/something/file.txt
测试
要运行测试,请从项目目录中运行以下命令。
$ ./vendor/bin/phpunit
支持
请通过GitHub请求支持或提交问题
贡献
请参阅CONTRIBUTING以获取详细信息。
安全相关的问题
如果您发现任何与安全相关的问题,请通过ajudiyabalam@gmail.com发送电子邮件,而不是使用问题跟踪器以获得更快的响应。您同时应该打开一个问题。
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。