fix(cloudflare): serve version.json as static asset

Avoid Workers billing for /version.json by removing worker-first routing and generating static _headers rules during manifest build.
This commit is contained in:
Shantur Rathore
2026-01-22 18:05:01 +00:00
parent c01846f7fd
commit b25fb0073e
3 changed files with 9 additions and 22 deletions

View File

@@ -72,4 +72,12 @@ const manifest = {
fs.mkdirSync(distDir, { recursive: true })
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf-8")
const headersPath = path.join(distDir, "_headers")
fs.writeFileSync(
headersPath,
"/version.json\n Cache-Control: no-cache\n Content-Type: application/json; charset=utf-8\n",
"utf-8",
)
console.log(`Wrote ${manifestPath}`)
console.log(`Wrote ${headersPath}`)

View File

@@ -2,28 +2,8 @@ export interface Env {
ASSETS: { fetch: (request: Request) => Promise<Response> }
}
function withHeader(response: Response, key: string, value: string): Response {
const headers = new Headers(response.headers)
headers.set(key, value)
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers,
})
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url)
if (url.pathname === "/version.json") {
const assetResponse = await env.ASSETS.fetch(request)
// Ensure this stays fresh; the server uses it on startup.
const withCache = withHeader(assetResponse, "Cache-Control", "no-cache")
return withHeader(withCache, "Content-Type", "application/json; charset=utf-8")
}
return new Response("Not found", { status: 404 })
return env.ASSETS.fetch(request)
},
}

View File

@@ -12,4 +12,3 @@ custom_domain = true
directory = "./dist"
binding = "ASSETS"
not_found_handling = "404-page"
run_worker_first = ["/version.json"]