fix(build): serve stable aliases for lazy plugin runtimes

This commit is contained in:
Clintchiz committed 2026-09-25 01:38:33 +05:30
1 parent ab0a4ff27d
commit f4eaf416be
4 files changed
+13 -2

No files matched your search

+1 -1
View File
@@ -322,7 +322,7 @@
}, },
"packages/cli": { "packages/cli": {
"name": "@wrnexus/cli", "name": "@wrnexus/cli",
"version": "0.8.71", "version": "0.8.72",
"bin": { "bin": {
"wrnexus": "src/index.ts", "wrnexus": "src/index.ts",
}, },
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@wrnexus/cli", "name": "@wrnexus/cli",
"version": "0.8.71", "version": "0.8.72",
"type": "module", "type": "module",
"main": "src/index.ts", "main": "src/index.ts",
"exports": { "exports": {
+7
View File
@@ -1053,6 +1053,13 @@ async function emitPluginAssets(
immutable: true, immutable: true,
}); });
// The emitted runtime is served from its content-addressed public path. // The emitted runtime is served from its content-addressed public path.
// Lazy runtime imports use stable plugin URLs, just as in development.
// Keep that alias revalidatable while the HTML uses the immutable URL.
const stablePath = runtime.publicPath ?? `/__wrnexus/assets/${safeAssetName(runtime.id)}.js`;
if (stablePath !== publicPath) {
assets.push({ id: runtime.id, publicPath: stablePath, file,
contentType: "text/javascript; charset=utf-8", runtime: true, immutable: false });
}
// Keep an empty source marker so @wrnexus/plugin can normalize this // Keep an empty source marker so @wrnexus/plugin can normalize this
// already-emitted descriptor during production HTML rendering without // already-emitted descriptor during production HTML rendering without
// trying to resolve the original build-time source on the deploy host. // trying to resolve the original build-time source on the deploy host.
@@ -83,6 +83,10 @@ export default {
const asset = await fetch(`http://127.0.0.1:${port}${assetPath}`); const asset = await fetch(`http://127.0.0.1:${port}${assetPath}`);
expect(asset.status).toBe(200); expect(asset.status).toBe(200);
expect(await asset.text()).toContain("window.__runtimeFixture = true"); expect(await asset.text()).toContain("window.__runtimeFixture = true");
const lazyAsset = await fetch(`http://127.0.0.1:${port}/__wrnexus/assets/runtime-fixture.js`);
expect(lazyAsset.status).toBe(200);
expect(await lazyAsset.text()).toContain("window.__runtimeFixture = true");
expect(lazyAsset.headers.get("cache-control") ?? "").not.toContain("immutable");
} finally { } finally {
proc.kill(); proc.kill();
await proc.exited; await proc.exited;