tormjens/extended-mix

Laravel Mix Helper 的扩展版本。

安装数: 6,222

依赖者: 0

建议者: 0

安全性: 0

星标: 1

关注者: 3

分支: 1

开放问题: 2

类型:标准

1.0.12 2024-08-08 08:07 UTC

README

Extended Mix 诞生于一个完全模块化的应用程序。我们需要从我们的模块(Composer 包)中加载资源,同时还要使热重载和将资源托管在 CDN 上成为可能。

这个应用程序的模块是常规的 Composer 包,所以文件夹结构将是这样的。

app/
vendor/
    foo/
        bar/

在推送到 master 时,它会编译资源并将它们推送到 AWS S3,那里已经设置了 Cloudfront。

本地我们希望仍然能够使用 HMR(热重载)或编译资源进行测试。

在生产中,我们希望资源通过我们的 CDN 被找到。

安装

通过 Composer 获取包

composer require tormjens/extended-mix

此包未启用自动发现,因为为其构建的应用程序在运行时加载它并修改其配置。要启用此包,您必须通过您的 config/app.php 或加载在您的 "主模块" 中的服务提供者注册它。

此示例取自我的应用程序的 core 模块。

public function register()
{
    $this->app->register(MixServiceProvider::class);
    
    config([
        'mix.driver.cdn' => [
            'include_vendor' => env('MIX_CDN_INCLUDE_VENDOR', false),
            'url' => env('MIX_CDN_URL', 'https://cdn.foo.com'),
            'format' => env('MIX_CDN_FORMAT', '{url}/{package}/{version}/{path}'),
        ]
    ]);
}

获取资源的 URL

实际上非常简单。无论何时您需要资源的 URL,只需使用

extendedMix('/css/app.css', 'foo/bar');

幕后,这将通过一系列解析器将请求的文件传递,以确定 URL

  1. 它将检查是否可以通过热重载请求请求的文件,然后返回启用热重载的文件的 URL。
  2. 它将检查是否有文件的本地副本,并返回代理资源的 URL。
  3. 它将检查 CDN(如果已配置),并返回 URL。

此外,它还支持 mix-manifest,因此您可以版本化您的资源。

对于某些资源在清单中,而某些资源不在清单中(当您使用 copy 方法时)的情况,您可以使用 variableAsset 函数,该函数将首先在本地查找资源,然后回退到 CDN。

variableAsset('/images/someImage.png', 'foo/bar');

代理本地资源

此包提供了一种通过名为 mix.show 的路由代理存储在本地资源的方法。虽然这在本地测试时非常方便,但在生产中并不理想,因为它只是为了服务资源而启动整个应用程序。您应该考虑在您的 web 服务器中添加一个规则来模拟此功能。

CDN 资源

CDN 默认支持,但需要遵守一定的约定才能正确显示您的资源。默认情况下,我们使用格式 /{vendor}/{package}/{version}/{pathToAsset} 将其附加到您的 CDN URL。这意味着如果您的 CDN 域名为 https://cdn.foo.com,并且您想为安装在版本 5.0 的 foo/bar 包显示 /css/app.css,您将得到:https://cdn.foo.com/foo/bar/5.0/css/app.css

此格式可以通过 mix.driver.cdn.format 配置选项进行更改。因此,如果您想省略供应商,可以将此设置为

// config/mix.php
return [
    'driver' => [
        'cdn' => [
            'format' => '{url}/{package}/{version}/{path}'
        ]
    ]   
];

然后它将读取 URL 为 https://cdn.foo.com/bar/5.0/css/app.css