tormjens / extended-mix
Laravel Mix Helper 的扩展版本。
Requires
- php: >=7.4
Requires (Dev)
- nunomaduro/collision: ^5.0
- orchestra/testbench: ^5.0
- pestphp/pest: dev-master
- phpunit/phpunit: ^9.3.10
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
- 它将检查是否可以通过热重载请求请求的文件,然后返回启用热重载的文件的 URL。
- 它将检查是否有文件的本地副本,并返回代理资源的 URL。
- 它将检查 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
。