🤔 @epic-web/remember
简单、类型安全、“单例”实现。适用于你的“热模块替换”涉及到重新评估模块,但你不想真正重新评估它的一部分的情况。
npm install @epic-web/remember
问题
你正在使用像 Remix 这样的框架,并开启了 --manual
模式,并且在每次更改时重新评估你的模块。但是你有一些状态不想在更改之间丢失。例如
- 数据库连接
- 内存缓存
这个解决方案
这个解决方案是从 @jenseng 的 abuse-the-platform
演示(ISC)中复制/粘贴/修改/测试而来的。它基本上是一个类型安全的单例实现,你可以用它来在模块重新评估之间保持状态。
用法
import { remember } from '@epic-web/remember'
export const prisma = remember('prisma', () => new PrismaClient())
请记住,你在回调中进行的任何更改都不会在模块重新评估时反映出来(这是重点)。因此,如果你需要更改回调,则需要重新启动服务器。
忘记一个值
如果一个值过时、记住的连接丢失或者记住的实例关闭/出错等,则可能需要显式地忘记该值。
import { remember, forget } from '@epic-web/remember'
export const server = remember('server', () =>
http.createServer().listen('8080')
.on('close', () => forget('server')))
许可证
MIT
鸣谢
原始代码由 @jenseng 编写,然后我对其进行了修改并发布以满足我的需求。