Skip to content

Commit 1b5a027

Browse files
authored
Fix setting custom ASSET_URLs and support cache busting without integrity check (#1427)
Fixes #1425 Fixes #1426
1 parent c918b06 commit 1b5a027

File tree

5 files changed

+56
-50
lines changed

5 files changed

+56
-50
lines changed

package-lock.json

Lines changed: 0 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
"sass": "^1.74.1",
2424
"sql-formatter": "^4.0.2",
2525
"vite": "^5.2.8",
26-
"vite-plugin-manifest-sri": "^0.2.0",
2726
"vue": "^2.7.16",
2827
"vue-json-pretty": "^1.9.5",
2928
"vue-router": "^3.6.5"

public/build/manifest.json

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,25 @@
11
{
22
"resources/img/favicon.png": {
3-
"file": "favicon.png",
4-
"src": "resources/img/favicon.png",
5-
"integrity": "sha384-tqnRilkeRgqFt3SUYaxuaQs14WOwuU8Gvk3sqRZmnyWZVhr1Kk19Ecr7dFMb4HZo"
3+
"file": "favicon.png?id=1542bfe8a0010dcbee710da13cce367f",
4+
"src": "resources/img/favicon.png"
65
},
76
"resources/js/app.js": {
8-
"file": "app.js",
7+
"file": "app.js?id=69a73e4fc0356dae6adf8cc33985b1d5",
98
"name": "app",
109
"src": "resources/js/app.js",
1110
"isEntry": true,
1211
"css": [
1312
"app.css"
14-
],
15-
"integrity": "sha384-EV5vlraT2g7leIzueltC7I+UzR7uBT4ndQF5b1G9I+kUrQ4XL0DREuRw/XiU/U3P"
13+
]
1614
},
1715
"resources/sass/styles-dark.scss": {
18-
"file": "styles-dark.css",
16+
"file": "styles-dark.css?id=4147954938fc149998024ad0251831e4",
1917
"src": "resources/sass/styles-dark.scss",
20-
"isEntry": true,
21-
"integrity": "sha384-/sLOxh+NTFEdcZ8svIuVTv/lSL65X3QGIXhExXAhntQYWjiez1CQbv4ICbtwRfd8"
18+
"isEntry": true
2219
},
2320
"resources/sass/styles.scss": {
24-
"file": "styles.css",
21+
"file": "styles.css?id=452cf65324025421cc414ccb7744885f",
2522
"src": "resources/sass/styles.scss",
26-
"isEntry": true,
27-
"integrity": "sha384-4HOmv1E51xgqbUYzCYXaRXPRja5nEho6eq/L/CKs0LlidzTGNTk81VtCAHqLiYSC"
23+
"isEntry": true
2824
}
2925
}

resources/views/layout.blade.php

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,8 @@
11
@php
2-
use Illuminate\Support\Facades\Vite;
3-
use Illuminate\Foundation\Vite as ViteFoundation;
2+
$nonExistentFileName = public_path('/vendor/horizon/nonExistentFile');
3+
$previousHotFile = Vite::hotFile();
44
5-
$nonExistentFileName = '/vendor/horizon/nonExistentFile';
6-
7-
$vite = new ViteFoundation();
8-
$vite->useHotFile($nonExistentFileName);
9-
10-
$viteDataSchemeLight = new ViteFoundation();
11-
$viteDataSchemeLight->useHotFile($nonExistentFileName);
12-
$viteDataSchemeLight->useStyleTagAttributes([
13-
'data-scheme' => 'light',
14-
]);
15-
16-
$viteDataSchemeDark = new ViteFoundation();
17-
$viteDataSchemeDark->useHotFile($nonExistentFileName);
18-
$viteDataSchemeDark->useStyleTagAttributes([
19-
'data-scheme' => 'dark',
20-
]);
5+
Vite::useHotFile($nonExistentFileName);
216
@endphp
227
<!DOCTYPE html>
238
<html lang="en">
@@ -26,16 +11,18 @@
2611
<meta charset="utf-8">
2712
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
2813
<meta name="csrf-token" content="{{ csrf_token() }}">
29-
<link rel="shortcut icon" href="{{ $vite->asset('resources/img/favicon.png', 'vendor/horizon') }}">
14+
<link rel="shortcut icon" href="{{ Vite::asset('resources/img/favicon.png', 'vendor/horizon') }}">
3015

3116
<title>Horizon{{ config('app.name') ? ' - ' . config('app.name') : '' }}</title>
3217

3318
<!-- Style sheets-->
3419
<link rel="preconnect" href="https://fonts.bunny.net">
3520
<link href="https://fonts.bunny.net/css?family=figtree:300,400,500,600" rel="stylesheet" />
3621

37-
{{ $viteDataSchemeLight('resources/sass/styles.scss', 'vendor/horizon') }}
38-
{{ $viteDataSchemeDark('resources/sass/styles-dark.scss', 'vendor/horizon') }}
22+
<link rel="preload" as="style" href="{{ Vite::asset('resources/sass/styles.scss', 'vendor/horizon') }}" />
23+
<link rel="stylesheet" href="{{ Vite::asset('resources/sass/styles.scss', 'vendor/horizon') }}" data-scheme="light" />
24+
<link rel="preload" as="style" href="{{ Vite::asset('resources/sass/styles-dark.scss', 'vendor/horizon') }}" />
25+
<link rel="stylesheet" href="{{ Vite::asset('resources/sass/styles-dark.scss', 'vendor/horizon') }}" data-scheme="dark" />
3926
</head>
4027
<body>
4128
<div id="horizon" v-cloak>
@@ -163,6 +150,9 @@
163150
window.Horizon = @json($horizonScriptVariables);
164151
</script>
165152

166-
{{ $vite('resources/js/app.js', 'vendor/horizon') }}
153+
@vite('resources/js/app.js', 'vendor/horizon')
167154
</body>
168155
</html>
156+
@php
157+
Vite::useHotFile($previousHotFile);
158+
@endphp

vite.config.mjs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,41 @@
11
import vue2 from "@vitejs/plugin-vue2";
22
import { defineConfig } from "vite";
33
import laravel from "laravel-vite-plugin";
4-
import manifestSRI from "vite-plugin-manifest-sri";
4+
import { createHash } from "node:crypto";
5+
import { resolve } from "node:path";
6+
import { readFileSync, writeFileSync } from "node:fs";
7+
8+
function manifestQueryParam() {
9+
return {
10+
name: "vite-horizon-manifest-query-param",
11+
apply: "build",
12+
enforce: "post",
13+
writeBundle({ dir }) {
14+
const manifestPath = resolve(dir, "manifest.json");
15+
const manifest = readFileSync(manifestPath, "utf-8");
16+
17+
if (manifest) {
18+
const parsedManifest = JSON.parse(manifest);
19+
20+
for (const property in parsedManifest) {
21+
const fileContent = readFileSync(
22+
resolve(dir, parsedManifest[property].file),
23+
"utf-8"
24+
);
25+
26+
parsedManifest[property].file += `?id=${createHash("md5")
27+
.update(fileContent)
28+
.digest("hex")}`;
29+
}
30+
31+
writeFileSync(
32+
manifestPath,
33+
JSON.stringify(parsedManifest, null, 2)
34+
);
35+
}
36+
},
37+
};
38+
}
539

640
const config = defineConfig({
741
plugins: [
@@ -11,7 +45,7 @@ const config = defineConfig({
1145
"resources/js/app.js",
1246
]),
1347
vue2(),
14-
manifestSRI(),
48+
manifestQueryParam(),
1549
],
1650
resolve: {
1751
alias: {

0 commit comments

Comments
 (0)