Sveltekit 开发与 workers KV -- 热重载
Sveltekit development with workers KV -- hot reloading
在开发 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)
}
在开发 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)
}