跳至主要内容

构建和部署

编写适配器

在 GitHub 上编辑此页面

如果尚不存在适用于你首选环境的适配器,你可以构建自己的适配器。我们建议查看类似于你的平台的适配器源代码并将其复制作为起点。

适配器包实现以下 API,它创建一个适配器

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方法中,适配器应该做一些事情

  • 清除构建目录
  • 使用builder.writeClientbuilder.writeServerbuilder.writePrerendered编写 SvelteKit 输出
  • 输出代码
    • ${builder.getServerDirectory()}/index.js导入服务器
    • 使用通过builder.generateManifest({ relativePath })生成的清单实例化应用程序
    • 侦听来自平台的请求,在必要时将它们转换为标准的请求,调用server.respond(request, { getClientAddress })函数生成响应并使用它进行响应
    • 通过传递给server.respondplatform选项向 SvelteKit 公开任何特定于平台的信息
    • 在必要时全局模拟fetch以在目标平台上工作。SvelteKit 提供了一个@sveltejs/kit/node/polyfills帮助程序,用于可以使用undici的平台
  • 必要时,打包输出以避免在目标平台上安装依赖项
  • 将用户的静态文件和生成的 JS/CSS 放置在目标平台的正确位置

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

上一个 Vercel
下一个 高级路由