Hi guys,
I noticed that the default October CMS theme now uses Laravel Mix which is great!
Is there a built-in way to use file versioning using the mix-manifest.json
file?
Laravel comes with a mix()
helper function, but this function is not recognized by Twig so it cannot be used to load assets by default.
I have found the following workaround to be effective:
In your Plugin.php
file (or Provider.php
if you want to use the app directory in October v3), simply register a Twig function that calls mix()
and passes the path of the asset you want to load:
public function registerMarkupTags(): array
{
return [
'functions' => [
'mix' => fn() => mix(
func_get_arg(0),
sprintf('/themes/%s/assets', \Cms\Classes\Theme::getActiveTheme()->getDirName())
),
],
];
}
Now, you will be able to load scripts and stylesheets with file versioning enabled like this:
<link rel="stylesheet" href="{{ mix('/dist/css/app.css') }}">
This workflow assumes that mix-manifest.json
is located in your theme’s assets
directory. You can do this by adding mix.setPublicPath('assets');
to your webpack.mix.js
.
I’m pretty happy overall with this solution, but I was just wondering if there is a better way to do this?