mehedi/asset-cdn

通过内容分发网络(CDN)提供Laravel资源

0.2.5 2020-12-29 09:41 UTC

This package is auto-updated.

Last update: 2024-09-26 03:34:29 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上访问的 paths
      以下示例将匹配在 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上访问的 files
      以下示例将匹配在 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上访问的 filetypes
      以下示例将匹配在 public 目录中以 *.css*.js 为类型的 任何 文件。

      'include' => [
          'extensions' => [
              '*.js',
              '*.css',
          ],
      ],
    • patterns
      为应可在CDN上访问的文件定义 patterns
      以下示例将匹配在 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仓库仅用于参考

待办事项

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