使用工人KV进行Sveltekit开发——热重载

问题描述 投票:0回答:2

开发 Svelte/kit 应用程序时是否可以使用 CloudFlare 的 Workers KV?

使用 CloudFlare Workers 适配器时,可以构建应用程序然后运行

wrangler dev

npm build
wrangler dev

但是,我还没有实现热模块重新加载:

npm dev & wrangler dev
cloudflare svelte cloudflare-workers sveltekit
2个回答
6
投票

据我所知,没有办法在本地模拟Workers KV。不过,我设置了一个本地 Redis 实例作为替代。

然后,我为 KV 存储创建了一些包装函数。在开发中,它与 Redis 通信,在生产中,它与 Workers KV 通信。例如,这是

get
的包装函数。

import { dev } from '$app/env'
import redis from 'redis'

const client = redis.createClient()
const get = promisify(client.get).bind(client)

export const getKvValue = async (key: string): Promise<string | null> => {
    return dev ? await get(key) : await KV.get(key)
}

更新:实际上,您只需使用 JavaScript 中的对象即可使事情变得更加简单,无需下载并运行 Redis 二进制文件。只需确保在设置值之前对值进行 JSON.stringify。

import { dev } from '$app/env'

const devKvStore = {}

const devGetKvValue = (key: string) => {
    return new Promise((resolve) => {
        resolve(devKvStore[key] ?? null)
    })
}

const devSetKvValue = (key: string, value: unknown) => {
    return new Promise((resolve) => {
        devKvStore[key] = JSON.stringify(value)
        resolve()
    })
}

export const getKvValue = async (key: string): Promise<string | null> => {
    return dev ? await devGetKvValue(key) : await KV.get(key)
}

export const setKvValue = async (key: string, value: unknown): Promise<void> => {
    return dev ? await devSetKvValue(key, value) : await KV.put(key, value)
}

0
投票

您可以使用 miniflare(通过 wrangler npm 包)来模拟 cloudflare 绑定,然后使用本地 dev vite 服务器进行非常快速的热重载等。这非常有效,至少对于 KV 和 D1 来说是这样。

有关更多详细信息和工作示例,请参阅此答案:https://stackoverflow.com/a/77194403/1129543

对应的示例项目是https://github.com/sdarnell/cf-svelte/

© www.soinside.com 2019 - 2024. All rights reserved.