🤔 @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 编写,然后我修改了它并发布了它以满足我的需求。