Skip to main content

Compilation et déploiement

Cloudflare Workers

Éditer cette page sur Github

Pour déployer sur Cloudflare Workers, utilisez adapter-cloudflare-workers.

À moins d'avoir une raison précise d'utiliser adapter-cloudflare-workers, nous recommandons plutôt d'utiliser adapter-cloudflare. Les deux adaptateurs sont équivalents, mais Cloudflare Pages vous offre des fonctionnalités comme l'intégration Github avec des builds et déploiements automatisés, des aperçus de déploiement, des retours en arrière instantanés, et d'autres choses.

Usage

Installez l'adaptateur avec npm i -D @sveltejs/adapter-cloudflare-workers, puis ajoutez-le à votre fichier svelte.config.js :

svelte.config.js
ts
import adapter from '@sveltejs/adapter-cloudflare-workers';
Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.
export default {
kit: {
adapter: adapter()
}
};

Configuration de base

Cet adaptateur attend un fichier wrangler.toml à la racine de votre projet. Il doit avoir cette forme :

wrangler.toml
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> peut être n'importe quoi. <your-account-id> peut être récupéré en vous connectant à votre espace Cloudflare et en l'extrayant de la fin de l'URL :

https://dash.cloudflare.com/<your-account-id>

Vous devriez ajouter le dossier .cloudflare (ou tout dossier défini en tant que main et site.bucket) à votre fichier .gitignore.

Vous aurez besoin d'installer wrangler et de vous y connecter, si vous ne l'avez pas déjà fait :

npm i -g wrangler
wrangler login

Puis, vous pouvez compiler votre application et la déployer :

wrangler deploy

Configuration personnalisée

Si vous souhaitez utiliser un fichier de configuration autre que wrangler.toml, vous pouvez le faire ainsi :

svelte.config.js
ts
import adapter from '@sveltejs/adapter-cloudflare-workers';
Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.
export default {
kit: {
adapter: adapter({ config: '<your-wrangler-name>.toml' })
}
};

Si vous souhaitez activer la compatibilité Node.js (en anglais), vous pouvez ajouter l'attribut "nodejs_compat" au fichier wrangler.toml :

wrangler.toml
compatibility_flags = [ "nodejs_compat" ]

Bindings

L'objet env contient les bindings de votre projet, qui consistent en des namespaces KV/DO, etc. Il est fourni à SvelteKit via la propriété platform, conjointement à context et caches, ce qui signifie que vous pouvez y accéder dans les hooks et les endpoints :

ts
export async function POST({ request, platform }) {
Binding element 'request' implicitly has an 'any' type.
Binding element 'platform' implicitly has an 'any' type.
7031
7031
Binding element 'request' implicitly has an 'any' type.
Binding element 'platform' implicitly has an 'any' type.
const x = platform.env.YOUR_DURABLE_OBJECT_NAMESPACE.idFromName('x');
}

Vous devriez plutôt utiliser le module intégré de SvelteKit $env pour gérer vos variables d'environnement.

Pour rendre ces types accessibles dans votre application, référencez-les dans votre fichier src/app.d.ts :

src/app.d.ts
declare global {
	namespace App {
		interface Platform {
			env?: {
				YOUR_KV_NAMESPACE: KVNamespace;
				YOUR_DURABLE_OBJECT_NAMESPACE: DurableObjectNamespace;
			};
		}
	}
}

export {};

Tester localement

platform.env est uniquement accessible dans le build final, et donc pas en mode développement. Pour tester le build, vous pouvez utiliser wrangler. Une fois que vous avez compilé votre site, lancez la commande wrangler pages dev .svelte-kit/cloudflare. Assurez-vous d'avoir vos bindings dans votre fichier wrangler.toml. La version 3 de Wrangler est recommandée.

Résolution de problèmes

Limites de taille de Worker

Lorsque vous déployez sur des workers, le serveur généré par SvelteKit est compilé en un seul fichier. Wrangler échouera à publier votre worker s'il excède la limite de taille après minification. Vous ne devriez normalement pas dépasser cette limite, mais certaines grosses librairies peuvent vous faire rencontrer ce problème. Dans ce cas, essayez de réduire la taille de votre worker en important ce type de librairie uniquement côté client. Lire la FÀQ pour plus d'informations.

Accès au système de fichiers

Vous ne pouvez pas utiliser fs dans les workers Cloudflare - vous devez prérendre les routes en question.

précédent Cloudflare Pages
suivant Netlify