Skip to main content

编写适配器

如果您偏好的环境还没有适配器,您可以自己构建适配器。我们建议查看类似平台的适配器源码并将其作为起点进行复制。

适配器包实现以下 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) {
// 适配器实现 }, 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 }) {
// 返回的对象在开发、构建和预览时成为 `event.platform` // 其形状与 `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
}) => {
// 如果具有给定 `config` 的路由在生产环境中可以使用来自 // `$app/server` 的 `read`,则返回 `true`,否则返回 `false` // 或抛出描述如何配置部署的描述性错误 } } }; return const adapter: Adapter
@type{import('@sveltejs/kit').Adapter}
adapter
;
}

其中,nameadapt 是必需的。emulatesupports 是可选的。

adapt 方法中,适配器应该执行以下几个任务:

  • 清理构建目录
  • 使用 builder.writeClientbuilder.writeServerbuilder.writePrerendered 写入 SvelteKit 输出
  • 输出以下代码:
    • ${builder.getServerDirectory()}/index.js 导入 Server
    • 使用通过 builder.generateManifest({ relativePath }) 生成的清单实例化应用
    • 监听来自平台的请求,必要时将其转换为标准 Request,调用 server.respond(request, { getClientAddress }) 函数生成 Response 并响应
    • 通过传递给 server.respondplatform 选项向 SvelteKit 暴露任何平台特定信息
    • 如果必要,全局填充 fetch 以在目标平台上工作。SvelteKit 为可以使用 undici 的平台提供了 @sveltejs/kit/node/polyfills 辅助工具
  • 如果必要,打包输出以避免需要在目标平台上安装依赖
  • 将用户的静态文件和生成的 JS/CSS 放在目标平台的正确位置

在可能的情况下,我们建议将适配器输出放在 build/ 目录下,将任何中间输出放在 .svelte-kit/[adapter-name] 目录下。

在 GitHub 编辑此页面

上一页 下一页