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?