arubacao/asset-cdn

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

0.2.5 2020-12-29 09:41 UTC

This package is auto-updated.

Last update: 2024-09-11 06:30:54 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 将直接传递给 Filesystem,它最终调用底层的存储驱动程序,例如 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仓库,仅供参考

待办事项

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