shineoncom/asset-cdn

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

0.2.5 2020-12-29 09:41 UTC

This package is auto-updated.

Last update: 2024-09-22 19:19:24 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