Mix.php
TLDR
This file contains the Illuminate\Foundation\Mix
class, which provides a method to get the path of a versioned Mix file.
Methods
__invoke
This method is used to get the path to a versioned Mix file. It takes two parameters:
-
$path
(string): The path of the Mix file. -
$manifestDirectory
(string): The directory where the Mix manifest is located (optional).
The method first checks if the Mix file is hot (using the /hot
path). If it is, it retrieves the URL from the hot file and returns it.
If the Mix file is not hot, the method checks for a Mix manifest file (mix-manifest.json
). If the manifest file is not found, an exception is thrown.
If the manifest file is found, the method retrieves the manifest data. If the Mix file path is not found in the manifest, an exception is thrown.
Finally, the method returns the HTML string of the Mix file URL.
Classes
No classes found.
<?php
namespace Illuminate\Foundation;
use Exception;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Str;
class Mix
{
/**
* Get the path to a versioned Mix file.
*
* @param string $path
* @param string $manifestDirectory
* @return \Illuminate\Support\HtmlString|string
*
* @throws \Exception
*/
public function __invoke($path, $manifestDirectory = '')
{
static $manifests = [];
if (! str_starts_with($path, '/')) {
$path = "/{$path}";
}
if ($manifestDirectory && ! str_starts_with($manifestDirectory, '/')) {
$manifestDirectory = "/{$manifestDirectory}";
}
if (is_file(public_path($manifestDirectory.'/hot'))) {
$url = rtrim(file_get_contents(public_path($manifestDirectory.'/hot')));
$customUrl = app('config')->get('app.mix_hot_proxy_url');
if (! empty($customUrl)) {
return new HtmlString("{$customUrl}{$path}");
}
if (Str::startsWith($url, ['http://', 'https://'])) {
return new HtmlString(Str::after($url, ':').$path);
}
return new HtmlString("//localhost:8080{$path}");
}
$manifestPath = public_path($manifestDirectory.'/mix-manifest.json');
if (! isset($manifests[$manifestPath])) {
if (! is_file($manifestPath)) {
throw new Exception("Mix manifest not found at: {$manifestPath}");
}
$manifests[$manifestPath] = json_decode(file_get_contents($manifestPath), true);
}
$manifest = $manifests[$manifestPath];
if (! isset($manifest[$path])) {
$exception = new Exception("Unable to locate Mix file: {$path}.");
if (! app('config')->get('app.debug')) {
report($exception);
return $path;
} else {
throw $exception;
}
}
return new HtmlString(app('config')->get('app.mix_url').$manifestDirectory.$manifest[$path]);
}
}