1https://github.com/sindresorhus/electron-store
electron-store
1能够用来保存Electron
应用程序或模块的简单数据持久性-保存和加载用户首选项,应用程序状态,缓存等。html
Electron
没有内置的方法来保留用户首选项和其余数据。electron-store
模块能够为您解决该问题,所以您能够专一于构建应用程序。 数据保存在app.getPath('userData')
2中的JSON
文件中。您能够在主进程和渲染器进程中直接使用此模块。vue
2https://electronjs.org/docs/api/app#appgetpathnamenode
app.getPath(name)
-储存你应用程序设置文件的文件夹,默认是appData
文件夹附加应用的名称。git
appData
-当前用户的应用数据文件夹,默认对应:github
%APPDATA%
Windows 中$XDG_CONFIG_HOME
or~/.config
Linux 中~/Library/Application Support
macOS 中算法
electron-store
模块的API更好。 您能够设置并获取嵌套属性。 您能够设置默认的初始配置。注:不少同窗以为用localstorage能够代替vuex, 对于不变的数据确实能够,可是当两个组件共用一个数据源(对象或数组)时,若是其中一个组件改变了该数据源,但愿另外一个组件响应该变化时,localstorage没法作到,缘由就是区别1。vuex
$ npm install electron-store
注:须要Electron 5或更高版本。若是安装失败,能够换成命令
cnpm install electron-store
(前提是安装了cnpm)npm
const Store = require('electron-store'); const store = new Store(); store.set('unicorn', '🦄'); console.log(store.get('unicorn')); //=> '🦄' // 使用点表示法访问嵌套属性 store.set('foo.bar', true); console.log(store.get('foo')); //=> {bar: true} store.delete('unicorn'); console.log(store.get('unicorn')); //=> undefined
更改是原子写入磁盘的,所以,若是进程在写入过程当中崩溃,则不会破坏现有配置。json
返回:一个新实例。api
options
Type: object
defaults
Type: object
// Default values for the store items.
// 注意:默认值将覆盖schema选项中的默认键。
schema
type: object
注:JSON Schema(https://json-schema.org/) 就是用来定义json数据约束的一个标准。根据这个约定模式,交换数据的双方能够理解json数据的要求和约束,也能够据此对数据进行验证,保证数据交换的正确性。目前最新的Json-schema版本是draft 7,发布于2018-03-19。
在后台,JSON模式(JSON Schema)验证器ajv3用于验证您的配置。 咱们使用JSON Schema draft-074并支持全部验证关键字5和格式6。
您应该将模式定义为一个对象,其中每一个键是数据属性的名称,每一个值是用于验证该属性的JSON模式。 在这里查看更多7。
3https://github.com/epoberezkin/ajv
4http://json-schema.org/latest/json-schema-validation.html
5https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md
6https://github.com/epoberezkin/ajv#formats
7https://json-schema.org/understanding-json-schema/reference/object.html#properties
例如:
const Store = require('electron-store'); const schema = { foo: { type: 'number', maximum: 100, minimum: 1, default: 50 }, bar: { type: 'string', format: 'url' } }; const store = new Store({schema}); console.log(store.get('foo')); //=> 50 store.set('foo', '1'); // [Error: Config schema violation: `foo` should be number]
注意:若是设置了默认值,则默认值将被覆盖。
migrations
Type: object
注:在解决此问题(https://github.com/sindresorhus/conf/issues/92)以前,请不要使用此功能。
每当升级版本时,您均可以使用迁移(migrations)对存储执行操做。
迁移对象应包含“版本”:处理程序的键值对。 版本也能够是semver range(https://github.com/npm/node-semver#ranges)。例如:
const Store = require('electron-store'); const store = new Store({ migrations: { '0.0.1': store => { store.set('debugPhase', true); }, '1.0.0': store => { store.delete('debugPhase'); store.set('phase', '1.0.0'); }, '1.0.2': store => { store.set('phase', '1.0.2'); }, '>=2.0.0': store => { store.set('phase', '>=2.0.0'); } } });
name
Type: string
Default: config
存储文件的名称(不带扩展名)。
若是您想要为应用程序提供多个存储文件,这将颇有用。 或者,若是您要制做一个可持久使用的Electron模块以保留一些数据,则在这种状况下,您不该使用名称config。
cwd
Type: string
Default: app.getPath('userData')
存储文件位置。 除非绝对必要,不然请勿指定! 默认状况下,它将经过遵循系统约定来选择最佳位置。 您极可能会误解并惹恼用户。
若是是相对路径,则相对于默认cwd。 例如在macOS 中,{cwd:'unicorn'}
将在〜/Librar/Application\ Support/App\ Name/unicorn
中生成一个存储文件。
encryptionKey
Type: string | Buffer | TypedArray | DataView
Default: undefined
若是加密密钥以安全方式(不是纯文本)存储在Node.js
应用程序中,则可用于保护敏感数据。 例如,经过使用node-keytar
(https://github.com/atom/node-keytar)安全地存储加密密钥,或向用户询问加密密钥(密码),而后将其存储在变量中。
除了安全性,这还能够用于混淆。 若是用户浏览config
目录并找到配置文件,由于它只是一个JSON
文件,所以他们可能会倾向于修改它。 经过提供加密密钥,该文件将被混淆,这有望阻止任何用户这样作。
它还具备确保配置文件完整性的好处。 若是以任何方式更改文件,则解密将不起做用,在这种状况下,存储将仅重置为默认状态。
指定后,将使用aes-256-cbc
加密算法对存储进行加密。
fileExtension
Type: string
Default: json
配置文件的扩展名。
一般,您不须要这样作,可是若是您想与带有可与您的应用程序关联的自定义文件扩展名的文件进行交互,则可能会颇有用。 这些多是简单的保存/导出/首选项文件,旨在在应用程序外部共享或保存。
clearInvalidConfig
Type: boolean
Default: true
若是读取配置文件致使SyntaxError(语法错误),则清除该配置。 这是一个很好的默认设置,由于该配置文件不适合手动编辑,所以一般意味着该配置已损坏,用户对此无能为力。 可是,若是让用户直接编辑配置文件,则可能会发生错误,而且当配置无效而不是清除时引起错误可能更有用。 禁用此选项将使其在无效的配置上引起SyntaxError而不是清除。
serialize
Type: Function
Default: value => JSON.stringify(value, null, '\t')
写入配置文件时将配置对象序列化为UTF-8字符串的函数。您一般不须要此功能,可是若是您想使用JSON之外的格式,则可能会颇有用。
deserialize
Type: Function
Default: JSON.parse
读取配置文件时从UTF-8字符串反序列化配置对象的功能。您一般不须要此功能,可是若是您想使用JSON之外的格式,则可能会颇有用。
accessPropertiesByDotNotation
Type: boolean
Default: true
经过点表示法访问嵌套属性。 例如:
const Store = require('electron-store'); const store = new Store(); store.set({ foo: { bar: { foobar: '🦄' } } }); console.log(store.get('foo.bar.foobar')); //=> '🦄'
另外,您能够将此选项设置为false,以便将整个字符串视为一个键。
const store = new Store({accessPropertiesByDotNotation: false}); store.set({ `foo.bar.foobar`: '🦄' }); console.log(store.get('foo.bar.foobar')); //=> '🦄'
watch
Type: boolean
Default: false
监视配置文件中的全部更改,若是已设置,则调用onDidChange的回调。 若是有多个进程更改同一个配置文件,这将颇有用。当前,此选项在macOS上的Node.js 8上不起做用。
您能够在键中使用点符号来访问嵌套属性。该实例(Instance)是可迭代的,所以您能够在for…of循环中直接使用它。
.set(key, value)
设置一个项目。该值必须是JSON可序列化的。 尝试将类型设置为undefined,function或symbol会致使TypeError。
.set(object)
一次设置多个项目。
.get(key, [defaultValue])
获取一个项目或defaultValue(若是该项目不存在)。
.reset(…keys)
将项目重置为其默认值(由defaults或schema选项定义)。
.has(key)
检查项目是否存在。
.delete(key)
删除项目。
.clear()
删除全部项目。
.onDidChange(key, callback)callback
: (newValue, oldValue) => {}
监视给定的键,对任何更改调用回调。 第一次设置键时,oldValue将是不肯定的,而删除键时,newValue将是不肯定的。
事件仅在同一过程当中触发。 所以,若是在渲染器进程中触发事件,则不会在主进程中得到事件。 参见#39(https://github.com/sindresorhus/electron-store/issues/39)。
.onDidAnyChange(callback)callback
: (newValue, oldValue) => {}
监视整个配置对象,对任何更改调用回调。 oldValue和newValue将分别是更改先后的配置对象。 您必须将oldValue与newValue进行比较,以了解发生了什么变化。
.size
获取项目总个数。
.store
获取全部数据做为对象或将当前数据替换为对象:
conf.store = { hello: 'world' };
.path
获取存储文件的路径。
.openInEditor()
在用户的编辑器中打开存储文件。
一、我可使用YAML或其余序列化格式吗?
只要表示形式与utf8
编码兼容,就可使用serialize
和反序列化选项来自定义配置文件的格式。使用YAML
的示例:
const Store = require('electron-store'); const yaml = require('js-yaml'); const store = new Store({ fileExtension: 'yaml', serialize: yaml.safeDump, deserialize: yaml.safeLoad });
7、相关
ahttps://github.com/sindresorhus/electron-util
bhttps://github.com/sindresorhus/electron-debug
chttps://github.com/sindresorhus/electron-context-menu
dhttps://github.com/sindresorhus/electron-dl
ehttps://github.com/sindresorhus/electron-unhandled
fhttps://github.com/sindresorhus/electron-reloader
ghttps://github.com/sindresorhus/electron-serve
hhttps://github.com/sindresorhus/conf