【问题标题】:Sveltekit development with workers KV -- hot reloadingSveltekit 开发与workers KV -- 热重载
【发布时间】:2026-01-07 01:45:01
【问题描述】:

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

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

npm build
wrangler dev

但是,我还没有让热模块重新加载工作:

npm dev & wrangler dev

【问题讨论】:

    标签: cloudflare svelte cloudflare-workers sveltekit


    【解决方案1】:

    据我所知,没有办法在本地模拟 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)
    }
    

    【讨论】: