如果你正在使用 electron-store ,你可能面临一些这样的问题:
- 通常你只能在主进程中使用,而在渲染进程使用时需要开启 node 集成功能,这是不安全且不被推荐的
- electron-store 最新版本只支持 ESM 并要求 Electron 30 及以上版本,这给升级工作带来一些困扰(当然通过一些构建工具如
electron-vite
是可以解决的)
electron-conf 是 conf 的一个分支(electron-store 的依赖库)。我们试图在这个库中消除一些目标用户不需要的依赖项和功能,并且仅为 Electron 设计。
- ✅ 更精简
- ✅ 只从磁盘读取一次数据,约 100 倍的速度提升 (electron-store 每次 get 时都需要读取磁盘)
- ✅ 更简单的迁移策略
- ✅ 更安全更方便的在 Electron 渲染器中使用它(无 nodeIntegration)
- ✅ 用 TypeScript 编写,支持 CommonJS 和 ESM。适用于 Electron 15.x 及更高版本。
- ❌ 移除文件监视
- ❌ 移除文件加密(大多数时候不会用,非常容易被破解,在 Electron 中主要用来存储持久化数据,程序状态,缓存等)
如果你在使用electron-store
,基本无需任何改造即可平替到electron-conf
。
如何使用
安装
$ npm install electron-conf
在主进程使用
import { Conf } from 'electron-conf/main'
const conf = new Conf()
conf.set('foo', '🌈')
console.log(conf.get('foo')) // => 🌈
// Use dot-notation to access nested properties
conf.set('a.b', true)
console.log(conf.get('a')) // => {b: true}
conf.delete('foo')
console.log(conf.get('foo')) // => undefined
在渲染进程使用
- 在主进程中注册一个监听器,以便您可以在渲染器进程中使用它。
import { Conf } from 'electron-conf/main'
const conf = new Conf()
conf.registerRendererListener()
- 暴露 Conf API 给渲染进程使用
你可以在指定的预加载脚本中暴露它:
import { exposeConf } from 'electron-conf/preload'
exposeConf()
或者在主进程中全局暴露给所有渲染进程使用:
import { useConf } from 'electron-conf/main'
useConf()
- 在渲染器进程中使用
import { Conf } from 'electron-conf/renderer'
const conf = new Conf()
await conf.set('foo', 1)
注意: 使用方式与主进程相同。不同之处在于所有 API 都是基于 Promise 的。
迁移
electron-conf 使用比 electorn-store 更简单的迁移策略。
你可以自定义版本并执行迁移配置的操作。electron-conf 实例化时会与配置文件中的版本号进行比较,进行更高版本的迁移操作。
注意:迁移版本必须大于 0。每次迁移都会定义一个新版本,并在之前的版本上递增。
import { Conf } from 'electron-conf/main'
const migrations = [
{
version: 1,
hook: (conf, version): void => {
conf.set('foo', 'a')
console.log(`migrate from ${version} to 1`) // migrate from 0 to 1
}
},
{
version: 2,
hook: (conf, version): void => {
conf.set('foo', 'b')
console.log(`migrate from ${version} to 2`) // migrate from 1 to 2
}
}
]
const conf = new Conf({ migrations })
订阅
electron-conf 和 electorn-store 一样支持订阅指定 key 或者 整个配置的变化。
const unsubscribe = conf.onDidChange('foo', (newValue, oldValue) => {
})
unsubscribe()
结语
你可以通过以下链接了解更多有关于 electron-conf 信息: