Skip to main content

Build and deploy

adapter を書く

Edit this page on GitHub

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

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

ts
/** @param {AdapterSpecificOptions} options */
export default function (options) {
/** @type {import('@sveltejs/kit').Adapter} */
const adapter = {
name: 'adapter-package-name',
async adapt(builder) {
// adapter implementation
},
async emulate() {
return {
async platform({ config, prerender }) {
Type '({ config, route }: { config: any; route: { id: string; }; }) => void' is not assignable to type '(details: { config: any; route: { id: string; }; }) => boolean'. Type 'void' is not assignable to type 'boolean'.2322Type '({ config, route }: { config: any; route: { id: string; }; }) => void' is not assignable to type '(details: { config: any; route: { id: string; }; }) => boolean'. Type 'void' is not assignable to type 'boolean'.
// the returned object becomes `event.platform` during dev, build and
// preview. Its shape is that of `App.Platform`
}
}
},
supports: {
read: ({ config, 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 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] に置くことをおすすめします。