eliurkis/laravelcdn

Laravel 内容分发网络 (CDN) 包

v1.0.1 2019-04-28 17:49 UTC

This package is auto-updated.

Last update: 2024-08-29 05:06:45 UTC


README

Latest Stable Version Total Downloads Build Status Scrutinizer Code Quality License

Laravel 内容分发网络包

该包允许开发者通过一个 artisan 命令将他们的资产(或任何公共文件)上传到 CDN。然后它允许他们在本地和在线文件版本之间进行切换。

分支自 publiux/laravelcdn

此项目是从 https://github.com/publiux/laravelcdn 分支出来的。所有原始作品的信用都归那里。

Laravel 支持

  • 此分支支持 Laravel 5.2 一直到 Laravel 5.5(包括 master)。
  • Laravel 5.5 及以上版本得到支持,以及包自动发现。

亮点

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

问题

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

安装

通过 Composer

在项目中要求 eliurkis/laravelcdn

composer require "eliurkis/laravelcdn"

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

Laravel 5.4 及以下:将服务提供者和外观添加到 config/app.php

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

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

发布包配置文件

php artisan vendor:publish --provider 'Eliurkis\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_USE_CLOUD_FRONT', false),
    'cdn_url' => env('CDN_CLOUD_FRONT_URL', false)
],

这可以在 '.env' 文件中按如下方式更改

CDN_USE_CLOUD_FRONT=
CDN_CLOUD_FRONT_URL=
默认 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

安全相关问题

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

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

变更日志

v1.0

  • 允许支持Laravel 5.8