Cloudflare Workers
Edit this page on GitHubTo deploy to Cloudflare Workers, use adapter-cloudflare-workers.
Unless you have a specific reason to use this adapter, we recommend using adapter-cloudflare instead.
Requires Wrangler v2.
Usagepermalink
Install with npm i -D @sveltejs/adapter-cloudflare-workers, then add the adapter to your svelte.config.js:
tsimportCannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.adapter from'@sveltejs/adapter-cloudflare-workers' ;export default {kit : {adapter :adapter ()}};
Basic Configurationpermalink
This adapter expects to find a wrangler.toml file in the project root. It should look something like this:
name = "<your-service-name>"
account_id = "<your-account-id>"
main = "./.cloudflare/worker.js"
site.bucket = "./.cloudflare/public"
build.command = "npm run build"
compatibility_date = "2021-11-12"
workers_dev = true<your-service-name> can be anything. <your-account-id> can be found by logging into your Cloudflare dashboard and grabbing it from the end of the URL:
https://dash.cloudflare.com/<your-account-id>You should add the
.cloudflaredirectory (or whichever directories you specified formainandsite.bucket) to your.gitignore.
You will need to install wrangler and log in, if you haven't already:
npm i -g wrangler
wrangler loginThen, you can build your app and deploy it:
wrangler publishCustom configpermalink
If you would like to use a config file other than wrangler.toml, you can do like so:
tsimportCannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.adapter from'@sveltejs/adapter-cloudflare-workers' ;export default {kit : {adapter :adapter ({config : '<your-wrangler-name>.toml' })}};
Environment variablespermalink
The env object, containing KV/DO namespaces etc, is passed to SvelteKit via the platform property along with context and caches, meaning you can access it in hooks and endpoints:
tsexport async functionBinding element 'request' implicitly has an 'any' type.Binding element 'platform' implicitly has an 'any' type.7031POST ({, request }) { platform
7031Binding element 'request' implicitly has an 'any' type.Binding element 'platform' implicitly has an 'any' type.constx =platform .env .YOUR_DURABLE_OBJECT_NAMESPACE .idFromName ('x');}
To make these types available to your app, reference them in your src/app.d.ts:
declare global {
namespace App {
interface Platform {
env?: {
YOUR_KV_NAMESPACE: KVNamespace;
YOUR_DURABLE_OBJECT_NAMESPACE: DurableObjectNamespace;
};
}
}
}
export {};
platform.envis only available in the production build. Use wrangler to test it locally
Troubleshootingpermalink
Accessing the file systempermalink
You can't access the file system through methods like fs.readFileSync in Serverless/Edge environments. If you need to access files that way, do that during building the app through prerendering. If you have a blog for example and don't want to manage your content through a CMS, then you need to prerender the content (or prerender the endpoint from which you get it) and redeploy your blog everytime you add new content.