{"record":{"id":"b68affb2716a343e","repo":"sveltejs/kit","slug":"exports-is-not-available-in-dev-mode","errorCode":null,"errorMessage":"exports is not available in dev mode","messagePattern":"exports is not available in dev mode","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/adapter-cloudflare/src/virtual-cloudflare-workers.js","lineNumber":115,"sourceCode":"\tif (!proxy) {\n\t\tthrow new Error(`Cannot access cloudflare:workers in a prerenderable route`);\n\t}\n\treturn als.run(newEnv, fn);\n}\n/** @type {Module['withEnvAndExports']} */\nexport function withEnvAndExports(newEnv, _, fn) {\n\tif (!proxy) {\n\t\tthrow new Error(`Cannot access cloudflare:workers in a prerenderable route`);\n\t}\n\treturn als.run(newEnv, fn);\n}\n\n// no-ops\nexport const exports = new Proxy(\n\t{},\n\t{\n\t\tget() {\n\t\t\tthrow new Error('exports is not available in dev mode');\n\t\t},\n\t\thas() {\n\t\t\tthrow new Error('exports is not available in dev mode');\n\t\t}\n\t}\n);\n/** @type {Module['waitUntil']} */\nexport function waitUntil() {}\n/** @type {Module['cache']} */\nexport const cache = {\n\tpurge() {\n\t\treturn Promise.resolve({ success: true, errors: [] });\n\t}\n};\nclass Span {\n\tget isTraced() {\n\t\treturn false;\n\t}","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/sveltejs/kit/blob/03f1687fe612ce3d2d9131139b5b188d9cf90c64/packages/adapter-cloudflare/src/virtual-cloudflare-workers.js#L97-L133","documentation":"The `exports` binding of the cloudflare:workers virtual module is only meaningful in the deployed/preview Workers runtime where the Worker's actual exports exist. In `vite dev` there is no built-and-deployed Worker to export, so the adapter substitutes a Proxy whose get trap unconditionally throws. Accessing any property on `exports` during dev therefore fails with this message.","triggerScenarios":"Importing { exports } from 'cloudflare:workers' in dev mode and reading any property of it (e.g. exports.default, named worker exports) from a load function, endpoint, or module-scope code running under `vite dev`.","commonSituations":"Code written for a Workers-only project uses `exports` to self-reference the Worker (e.g. for worker-to-worker RPC via CloudflareServiceBinding) and is reused inside a SvelteKit dev session; accessing `exports.default` to call the current worker.","solutions":["Remove the `exports` usage from SvelteKit server code — use service bindings configured in wrangler.jsonc instead of self-referencing exports.","Guard the access so it only runs in the deployed runtime: if (import.meta.env.DEV) skip or mock the exports usage.","Test the exports-dependent path with `wrangler dev` on a built worker instead of `vite dev`.","Provide a dev-mode stub: wrap the import in a module that returns a mock during dev."],"exampleFix":"// before\nimport { exports } from 'cloudflare:workers';\nconst worker = exports.default;\n\n// after\nimport { env } from 'cloudflare:workers'; // use bindings instead, or guard:\nlet worker;\nif (!import.meta.env.DEV) {\n  const { exports } = await import('cloudflare:workers');\n  worker = exports.default;\n}","handlingStrategy":"fallback","validationCode":"if (import.meta.env.DEV) {\n  console.warn('cloudflare:workers exports is unavailable in dev; skipping');\n}","typeGuard":"function exportsAvailable() {\n  return typeof import.meta !== 'undefined' && !import.meta.env.DEV;\n}","tryCatchPattern":"try {\n  const { exports } = await import('cloudflare:workers');\n  return exports.default;\n} catch (e) {\n  if (e.message.includes('not available in dev mode')) return devStubWorker;\n  throw e;\n}","preventionTips":["Prefer service bindings over self-referencing `exports` from cloudflare:workers.","Gate any `exports` usage behind `!import.meta.env.DEV`.","Test exports-dependent code paths with `wrangler dev` on a built worker.","Document dev-mode limitations when sharing Worker utility code into SvelteKit."],"tags":["cloudflare","dev-mode","workers-runtime","sveltekit"],"backgroundTag":"api-unavailable-in-dev-mode","analyzedSha":"03f1687fe612ce3d2d9131139b5b188d9cf90c64","analyzedAt":"2026-09-02T02:01:50.504Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}