构建和部署
编写适配器
在 GitHub 上编辑此页面如果尚不存在适用于你首选环境的适配器,你可以构建自己的适配器。我们建议查看类似于你的平台的适配器源代码并将其复制作为起点。
适配器包实现以下 API,它创建一个适配器
ts
/** @param {AdapterSpecificOptions} options */export default function (options ) {/** @type {import('@sveltejs/kit').Adapter} */constadapter = {name : 'adapter-package-name',asyncadapt (builder ) {// adapter implementation},asyncemulate () {return {asyncType '({ 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'.platform ({config ,prerender }) {// 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}}};returnadapter ;}
其中,name
和adapt
是必需的。emulate
和supports
是可选的。
在adapt
方法中,适配器应该做一些事情
- 清除构建目录
- 使用
builder.writeClient
、builder.writeServer
和builder.writePrerendered
编写 SvelteKit 输出 - 输出代码
- 从
${builder.getServerDirectory()}/index.js
导入服务器
- 使用通过
builder.generateManifest({ relativePath })
生成的清单实例化应用程序 - 侦听来自平台的请求,在必要时将它们转换为标准的请求,调用
server.respond(request, { getClientAddress })
函数生成响应并使用它进行响应 - 通过传递给
server.respond
的platform
选项向 SvelteKit 公开任何特定于平台的信息 - 在必要时全局模拟
fetch
以在目标平台上工作。SvelteKit 提供了一个@sveltejs/kit/node/polyfills
帮助程序,用于可以使用undici
的平台
- 从
- 必要时,打包输出以避免在目标平台上安装依赖项
- 将用户的静态文件和生成的 JS/CSS 放置在目标平台的正确位置
在可能的情况下,我们建议将适配器输出放在 build/
目录下,并将任何中间输出放在 .svelte-kit/[adapter-name]
下。