Skip to main content

Écrire un adaptateur

Si aucun adaptateur n’existe pour votre environnement favori, vous pouvez écrire le vôtre. Nous vous recommandons de regarder le code source d’un adaptateur pour une plateforme ressemblant à la vôtre et de vous en servir en tant que point de départ.

Les paquets d’adaptateur implémentent l’API suivante, qui crée un objet Adapter :

/** @param {AdapterSpecificOptions} options */
export default function (options) {
	/** @type {import('@sveltejs/kit').Adapter} */
	const adapter = {
		name: 'adapter-package-name',
		async adapt(builder) {
			// implémentation de l'adaptateur
		},
		async emulate() {
			return {
				async platform({ config, prerender }) {
					// l'objet renvoyé devient `event.platform` lors du développement, de
					// la compilation et de la prévisualisation. Sa forme est celle de `App.Platform`
				}
			}
		},
		supports: {
			read: ({ config, route }) => {
				// Renvoyez `true` si la route avec la `config` donnée peut utiliser `read`
				// (importé depuis `$app/server`) en production, ou renvoyez `false` si elle ne peut pas.
				// Vous pouvez aussi jeter une erreur décrivant comment configurer le déploiement
			},
			instrumentation: () => {
				// Renvoyez `true` si cet adaptateur supporte le chargement du fichier `instrumentation.server.js`
				// Renvoyez `false` sinon, ou jetez une erreur expliquant le problème.
			}
		}
	};

	return adapter;
}

De ces options, uniquement name et adapt sont requises. emulate et supports sont optionnelles.

L’adaptateur est censé faire un certain nombre de choses au sein de la méthode adapt :

  • Supprimer le dossier de compilation
  • Écrire l’output de SvelteKit avec builder.writeClient, builder.writeServer et builder.writePrerendered
  • Générer du code qui :
    • Importe Server depuis ${builder.getServerDirectory()}/index.js
    • Instancie l’application avec un manifeste généré avec builder.generateManifest({ relativePath })
    • Écoute les requêtes venant de la plateforme, les convertit en objets Request standards si besoin, appelle la fonction server.respond(request, { getClientAddress }) pour générer une réponse Response et répond à la requête avec cette réponse
    • expose à SvelteKit toute information spécifique à la plateforme via l’option platform passée à server.respond
    • remplace globalement la méthode fetch pour qu’elle puisse fonctionner sur la plateforme ciblée, si nécessaire. SvelteKit fournit un utilitaire @sveltejs/kit/node/polyfills pour les plateformes qui peuvent utiliser undici
  • Compile l’output pour éviter d’avoir à installer les dépendances sur la plateforme cible, si nécessaire
  • Place les fichiers statiques et les fichiers JS/CSS générés dans l’emplacement prévu par la plateforme cible

Lorsque cela est possible, nous recommandons de placer les fichiers générés par l’adaptateur dans le dossier build/ avec tout output intermédiaire placé dans le dossier .svelte-kit/[adapter-name].

Modifier cette page sur Github llms.txt

précédent suivant