cloudflare - Sveltekit 开发与 workers KV -- 热重载

标签 cloudflare svelte cloudflare-workers sveltekit

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

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

npm build
wrangler dev

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

npm dev & wrangler dev

最佳答案

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

关于cloudflare - Sveltekit 开发与 workers KV -- 热重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69057159/

相关文章:

javascript - Cloudflare IP 地理定位替代方案?在 JavaScript 或 PHP 中?

https - 与鹈鹕的混合内容

javascript - Hot Reload在带有Svelte-routing的Electron Svelte中显示黑屏

css - Svelte:内联 CSS 动画不起作用

cloudflare-workers - 在 Typescript 中使用环境变量

php - Cloudflare header 返回 IPV6 地址

amazon-web-services - 如何禁用 ${appName}.elasticbeanstalk.com URL?

amazon-s3 - 在 cloudflare workers 中使用 aws4fetch 包调用 AWS api?

javascript - 如何从 SvelteKit 应用程序发送安全的 API 请求,而不在客户端显示 API key ?

cloudflare - 访问 Cloudflare Workers 站点的压缩数据