steveeakin/asset-cdn

通过内容分发网络 (CDN) 服务 Laravel 资产

0.2.5 2020-12-29 09:41 UTC

This package is auto-updated.

Last update: 2024-09-08 20:53:48 UTC


README

Latest Stable Version GitHub Workflow Status Codecov Quality Score Total Downloads

通过内容分发网络 (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 对 Laravel 5.4 - 8.* 在 PHP 7.07.17.27.37.4 上进行了功能性和完全测试。

配置

1. 配置文件系统

仅当您计划通过提供的命令管理您的资产时需要: asset-cdn:pushasset-cdn:syncasset-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_urlfilesystem.disk

// config/asset-cdn.php

[
    'cdn_url' => 'https://cdn.mysite.com',
    'filesystem' => [
        'disk' => 'asset-cdn',
    ],
]

4. 编辑 config/asset-cdn.php 中的 files

仅当您计划通过提供的命令管理您的资产时需要: asset-cdn:pushasset-cdn:syncasset-cdn:empty

files 总是假设从 public 目录的相对路径

  • ignoreDotFiles
    排除“隐藏”目录和文件(以点开头)。

  • ignoreVCS
    忽略版本控制目录。

  • include
    任何 匹配至少一个 include 规则的文件都将被包含。默认情况下不包含任何文件。

    • paths
      定义应该可在 CDN 上提供的路径。
      以下示例将匹配 任何public 目录中找到的 任何 jscss 路径中的文件。

      '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 上提供的文件。
      以下示例将匹配 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 上提供的文件类型。
      以下示例将匹配 public 目录中的 *.css*.js 类型的 任何 文件。

      'include' => [
          'extensions' => [
              '*.js',
              '*.css',
          ],
      ],
    • patterns
      为应在 CDN 上提供的文件定义模式。
      以下示例将匹配 public 目录中以字母 ab 开头的 任何 文件。

      /*
       * 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仓库Vinelab

待办事项

  • 视频教程:如何使用S3/Cloudfront
  • ignoreVCS查找器配置编写测试
  • ignoreDotFiles查找器配置编写测试
  • 扩展CombinedFinderTest