写入适配器
如果你首选环境的适配器尚不存在,你可以构建自己的适配器。我们向类似于你的平台推荐 查看适配器的来源 并将其复制为起点。
¥If an adapter for your preferred environment doesn’t yet exist, you can build your own. We recommend looking at the source for an adapter to a platform similar to yours and copying it as a starting point.
适配器包实现以下 API,它创建了一个 Adapter:
¥Adapter packages implement the following API, which creates an 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 是可选的。
¥Of these, name and adapt are required. emulate and supports are optional.
在 adapt 方法中,适配器应该执行许多操作:
¥Within the adapt method, there are a number of things that an adapter should do:
清除构建目录
¥Clear out the build directory
使用
builder.writeClient、builder.writeServer和builder.writePrerendered写入 SvelteKit 输出¥Write SvelteKit output with
builder.writeClient,builder.writeServer, andbuilder.writePrerendered输出代码:
¥Output code that:
从
${builder.getServerDirectory()}/index.js导入Server¥Imports
Serverfrom${builder.getServerDirectory()}/index.js使用
builder.generateManifest({ relativePath })生成的清单实例化应用¥Instantiates the app with a manifest generated with
builder.generateManifest({ relativePath })监听来自平台的请求,如有必要,将其转换为标准
Request,调用server.respond(request, { getClientAddress })函数生成Response并做出响应¥Listens for requests from the platform, converts them to a standard
Requestif necessary, calls theserver.respond(request, { getClientAddress })function to generate aResponseand responds with it通过传递给
server.respond的platform选项向 SvelteKit 公开任何特定于平台的信息¥expose any platform-specific information to SvelteKit via the
platformoption passed toserver.respond如有必要,全局填充
fetch以在目标平台上工作。SvelteKit 为可以使用undici的平台提供了@sveltejs/kit/node/polyfills辅助程序¥Globally shims
fetchto work on the target platform, if necessary. SvelteKit provides a@sveltejs/kit/node/polyfillshelper for platforms that can useundici
打包输出以避免在必要时需要在目标平台上安装依赖
¥Bundle the output to avoid needing to install dependencies on the target platform, if necessary
将用户的静态文件和生成的 JS/CSS 放在目标平台的正确位置
¥Put the user’s static files and the generated JS/CSS in the correct location for the target platform
如果可能,我们建议将适配器输出放在 build/ 目录下,并将任何中间输出放在 .svelte-kit/[adapter-name] 下。
¥Where possible, we recommend putting the adapter output under the build/ directory with any intermediate output placed under .svelte-kit/[adapter-name].