publiux/laravelcdn

Laravel内容分发网络(CDN)包

v4.1.0 2023-05-10 13:27 UTC

This package is auto-updated.

Last update: 2024-09-23 11:19:39 UTC


README

Latest Stable Version Total Downloads Build Status Scrutinizer Code Quality License

Laravel内容分发网络包

此包允许开发人员通过单个Artisan命令将他们的资源(或任何公共文件)上传到CDN。然后,它允许他们在本地和在线文件版本之间切换。

Vinelab/cdn分叉

该项目是从https://github.com/Vinelab/cdn分叉的。所有原始作品的荣誉都归那里。

Laravel支持

  • 此分叉支持Laravel 8及以上版本。
  • 支持包自动发现
  • 如果您需要使用Laravel 8以下的版本,请使用此包的~3版本。
  • Laravel 8及以上版本应使用此包的~4版本。

亮点

  • 亚马逊网络服务(AWS)- S3
  • 数字海洋(DO)- Spaces
  • Artisan命令上传内容到CDN
  • 简单的门面访问CDN资源

问题

  1. 这个包是Laravel FileSystem的替代品吗?它们可以一起使用吗?
  • 不,这个包是在Laravel 4中引入的,其主要目的是通过从CDN加载到您的视图页面来管理您的CDN资源,并轻松在本地和CDN文件版本之间切换。此外,它允许您在指定资源目录和规则后通过单个命令上传所有资源。FileSystem是在Laravel 5中引入的,旨在简化文件从/到CDN的加载/上传。它可以像此包一样用于从CDN加载资源,但由于它期望您逐个上传文件,因此将资源上传到CDN会更困难。因此,此包仍然不是Laravel FileSystem的替代品,并且它们可以一起使用。

安装

通过Composer

在项目中要求publiux/laravelcdn

composer require "publiux/laravelcdn:~4.0"

如果您正在使用Laravel 5.4或以下版本,您需要注册服务提供者

Laravel 5.4及以下版本:将服务提供者和门面添加到config/app.php

'providers' => array(
     //...
     Publiux\laravelcdn\CdnServiceProvider::class,
),
'aliases' => array(
     //...
     'CDN' => Publiux\laravelcdn\Facades\CdnFacadeAccessor::class
),

如果您正在使用Laravel 5.5,则无需注册服务提供者,因为此包会自动发现。

发布包配置文件

php artisan vendor:publish --provider 'Publiux\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](http://docs.aws.amazon.com/aws-sdk-php/v3/guide/)

用法

您可以使用以下命令将您的资源推送到CDN,并清空您的资源。

推送

只有更改过的资源会被推送到CDN。(感谢)

上传资源到CDN

php artisan cdn:push

您可以在cdn.php配置文件中指定文件夹上传前缀。您的资源将被上传到S3上的该文件夹。

清空

从CDN中删除资源

php artisan cdn:empty

注意:这将删除整个存储桶。如果您在推送资源时指定了上传文件夹,这可能不是您想要的结果。

加载资源

使用CDN外观调用CDN::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

注意:与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

注意:与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](https://github.com/publiux/laravelcdn/issues)请求支持或提交问题。

贡献

有关详细信息,请参阅[CONTRIBUTING](https://github.com/publiux/laravelcdn/blob/master/CONTRIBUTING.md)。

安全相关问题

如果您发现任何安全相关的问题,请通过电子邮件publiux@gmail.com联系,而不是使用问题跟踪器以获得更快的响应。您应该同时打开一个问题。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅[许可证文件](https://github.com/publiux/laravelcdn/blob/master/LICENSE)。

变更日志

v2.0.5

  • 添加了连接错误报告

v2.0.4

  • 添加了对DigitalOcean Spaces的API支持

v2.0.3

  • 添加了对上传文件夹前缀的支持

v2.0.2

  • 更新了readme,详细说明了Laravel <5.5的使用说明

v2.0.1

  • 修复了composer.json中的错误

v2.0.0

  • 支持Laravel 5.5

v1.0.3

  • 修复了无法使用无协议的URL用于CloudFront的bug。现在有效的URL以http、https或简单的'//'开头

v1.0.2

  • 修复了意外遗漏了elixir函数的bug。

v1.0.1

  • 允许使用环境变量进行配置