adapter を書く
あなたが使いたい環境向けの adapter がまだ存在しない場合は、ご自身で adapter を作成することができます。あなたが使いたい環境に似ているプラットフォームの adapter のソースを見て、コピーするところから始めることをおすすめします。
Adapter パッケージは以下の API を実装しなければなりません。これによって Adapter が作られます:
/** @param {AdapterSpecificOptions} options */
export default function (options: anyoptions) {
/** @type {import('@sveltejs/kit').Adapter} */
const const adapter: Adapteradapter = {
Adapter.name: stringThe 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.
adapt(builder: Builderbuilder) {
// adapter implementation
},
async Adapter.emulate?: (() => MaybePromise<Emulator>) | undefinedCreates 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;
instrumentation?: () => boolean;
} | undefined
Checks called during dev and build to determine whether specific features will work in production with this adapter.
supports: {
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
},
tracing: () => voidtracing: () => {
// Return `true` if this adapter supports loading `tracing.server.js`.
// Return `false if it can't, or throw a descriptive error.
}
}
};
return const adapter: Adapteradapter;
}このうち、name と adapt は必須です。emulate と supports はオプションです。
adapt メソッドの中で、adapter が行うべきことがいくつかあります:
- build ディレクトリの掃除
- SvelteKit の出力を
builder.writeClient、builder.writeServer、builder.writePrerenderedで書き出す - これらのコードを出力する:
${builder.getServerDirectory()}/index.jsからServerをインポートするbuilder.generateManifest({ relativePath })で生成された manifest でアプリをインスタンス化する- 必要に応じて、プラットフォームからのリクエストをリスン(Listen)しそのリクエストを標準の [
Request](https://developer.mozilla.org/ja/docs/Web/API/Request) に変換し、server.respond(request, { getClientAddress })関数を呼び出して [Response`](https://developer.mozilla.org/ja/docs/Web/API/Response) を生成して応答する server.respondに渡されるplatformオプションを使用してプラットフォーム固有の情報を SvelteKit に公開する- 必要に応じて、ターゲットのプラットフォームで動作するよう
fetchをグローバルにシム(shim)する。SvelteKit は、プラットフォームがundiciを使用できるようにするための@sveltejs/kit/node/polyfillsヘルパーを提供しています
- 必要に応じて、ターゲットのプラットフォームで依存関係(dependencies)をインストールするのを避けるため、出力をバンドルする
- ユーザーの静的ファイルと生成された JS/CSS をターゲットのプラットフォームにとって適切な場所に配置する
可能であれば、adapter の出力は build/ ディレクトリに置き、中間出力は .svelte-kit/[adapter-name] に置くことをおすすめします。