Skip to main content

adapter を書く

あなたが使いたい環境向けの adapter がまだ存在しない場合は、ご自身で adapter を作成することができます。あなたが使いたい環境に似ているプラットフォームの adapter のソースを見て、コピーするところから始めることをおすすめします。

Adapter パッケージは以下の API を実装しなければなりません。これによって Adapter が作られます:

/** @param {AdapterSpecificOptions} options */
export default function (options: any
@paramoptions
options
) {
/** @type {import('@sveltejs/kit').Adapter} */ const const adapter: Adapter
@type{import('@sveltejs/kit').Adapter}
adapter
= {
Adapter.name: string

The name of the adapter, using for logging. Will typically correspond to the package name.

name
: 'adapter-package-name',
async Adapter.adapt(builder: Builder): MaybePromise<void>

This function is called after SvelteKit has built your app.

@parambuilder An object provided by SvelteKit that contains methods for adapting the app
adapt
(builder: Builderbuilder) {
// adapter implementation }, async Adapter.emulate?(): MaybePromise<Emulator>

Creates an Emulator, which allows the adapter to influence the environment during dev, build and prerendering

emulate
() {
return { async
Emulator.platform?(details: {
    config: any;
    prerender: PrerenderOption;
}): MaybePromise<App.Platform>

A function that is called with the current route config and prerender option and returns an App.Platform object

platform
({ config: anyconfig, prerender: PrerenderOptionprerender }) {
// the returned object becomes `event.platform` during dev, build and // preview. Its shape is that of `App.Platform` } } },
Adapter.supports?: {
    read?: (details: {
        config: any;
        route: {
            id: string;
        };
    }) => boolean;
} | undefined

Checks called during dev and build to determine whether specific features will work in production with this adapter

supports
: {
read?: ((details: {
    config: any;
    route: {
        id: string;
    };
}) => boolean) | undefined

Test support for read from $app/server

@paramconfig The merged route config
read
: ({ config: anyconfig,
route: {
    id: string;
}
route
}) => {
// Return `true` if the route with the given `config` can use `read` // from `$app/server` in production, return `false` if it can't. // Or throw a descriptive error describing how to configure the deployment } } }; return const adapter: Adapter
@type{import('@sveltejs/kit').Adapter}
adapter
;
}

このうち、nameadapt は必須です。emulatesupports はオプションです。

adapt メソッドの中で、adapter が行うべきことがいくつかあります:

  • build ディレクトリの掃除
  • SvelteKit の出力を builder.writeClientbuilder.writeServerbuilder.writePrerendered で書き出す
  • これらのコードを出力する:
    • ${builder.getServerDirectory()}/index.js から Server をインポートする
    • builder.generateManifest({ relativePath }) で生成された manifest でアプリをインスタンス化する
    • 必要に応じて、プラットフォームからのリクエストをリスン(Listen)しそのリクエストを標準の Request に変換し、server.respond(request, { getClientAddress }) 関数を呼び出して Response を生成して応答する
    • server.respond に渡される platform オプションを使用してプラットフォーム固有の情報を SvelteKit に公開する
    • 必要に応じて、ターゲットのプラットフォームで動作するよう fetch をグローバルにシム(shim)する。SvelteKit は、プラットフォームが undici を使用できるようにするための @sveltejs/kit/node/polyfills ヘルパーを提供しています
  • 必要に応じて、ターゲットのプラットフォームで依存関係(dependencies)をインストールするのを避けるため、出力をバンドルする
  • ユーザーの静的ファイルと生成された JS/CSS をターゲットのプラットフォームにとって適切な場所に配置する

可能であれば、adapter の出力は build/ ディレクトリに置き、中間出力は .svelte-kit/[adapter-name] に置くことをおすすめします。

Edit this page on GitHub