juhasev / laravelcdn
Laravel内容分发网络(CDN)包
Requires
- php: ^8.1
- aws/aws-sdk-php: 3.288.0
- laravel/framework: ^10.0 | ^11.0
Requires (Dev)
- mockery/mockery: ^1.0
- nunomaduro/collision: ^7.0 | ^8.1
- orchestra/testbench: ^8.0 | ^9.0
- phpunit/phpunit: ^10.5.0
This package is auto-updated.
Last update: 2024-09-18 14:28:57 UTC
README
Laravel CDN 资产管理器
Laravel内容分发网络包
该包为开发者提供了使用单个Artisan命令将他们的资产(或任何公共文件)上传到CDN的能力。然后它允许他们切换文件的本地和在线版本。
历史
该项目曾拥有多个家园,不幸的是,之前的维护者对该项目失去了兴趣。我计划维护这个包,因为我们有多个使用它的项目。这是Laravel CDN的最新版本。
从Publiux/laravelcdn分叉
从Vinelab/cdn分叉
该项目最初是从https://github.com/Vinelab/cdn分叉的。所有对原始工作的赞誉都归功于那里。
Laravel 支持
- 如果你使用Laravel 10,请使用
v4.*
- 如果你使用Laravel 9,请使用
v3.*
- 如果你使用Laravel 8,请使用
v2.2.0
- 如果你使用Laravel 7,请使用
v2.1.0
亮点
- Amazon Web Services (AWS) - S3
- DigitalOcean (DO) - Spaces
- Artisan命令上传内容到CDN
- 简单的外观访问CDN资产
问题
- 这个包是Laravel FileSystem的替代品吗?它们可以一起工作吗?
- 不,这个包是在Laravel 4中引入的,其主要目的是通过从CDN加载它们到你的视图页面来管理你的CDN资产,并且可以轻松地在本地和CDN版本之间切换文件。此外,它允许你在指定了资产目录和规则后,使用单个命令上传所有资产。FileSystem是在Laravel 5中引入的,它旨在简化文件从/到CDN的加载/上传。它可以像这个包一样用于从CDN加载资产,但由于它期望你逐个上传文件,因此将资产上传到CDN更困难。因此,这个包仍然不是Laravel FileSystem的替代品,它们可以一起使用。
安装
通过Composer
在你的项目中要求juhasev/laravelcdn
composer require juhasev/laravelcdn
如果你使用Laravel 5.4或以下版本,你需要注册服务提供者
Laravel 5.4及以下版本:将服务提供者和外观添加到config/app.php
'providers' => array(
//...
SampleNinja\LaravelCdn\CdnServiceProvider::class,
)
'aliases' => array(
//...
'CDN' => SampleNinja\LaravelCdn\Facades\CdnFacadeAccessor::class
)
如果你使用Laravel 5.5,不需要注册服务提供者,因为这个包是自动发现的。
发布包配置文件
php artisan vendor:publish --provider 'SampleNinja\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。尽管如此,由于DO原生支持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上的该文件夹。
清空
从CDN中删除资源
php artisan cdn:empty
注意:这将删除整个存储桶。如果您在推送资源时指定了上传文件夹,这可能不是您想要的结果。
加载资源
使用CDN
外观调用CDN::asset()
函数。
注意:asset
与Laravel的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的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 5.4的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。
致谢
- Juha Vehnia(分支者)
- Raul Ruiz(原始分支者)
- Mahmoud Zalt(原始开发者)
- Filipe Garcia(在分支之前做出了贡献,未获得认可的重复上传验证的拉取请求)
- 原始项目的贡献者
- 所有分支的贡献者
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。