🤔 @epic-web/remember

简单、类型安全、“单例”实现。

适用于你的“热模块替换”涉及到重新评估模块,但你不想真正重新评估它的一部分的情况。

npm install @epic-web/remember

Build Status GPL 3.0 License Code of Conduct

问题

你正在使用像 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 编写,然后我对其进行了修改并发布以满足我的需求。