在 Electron (Atom Shell) 应用程序中存储用户设置的位置?
Posted
技术标签:
【中文标题】在 Electron (Atom Shell) 应用程序中存储用户设置的位置?【英文标题】:Where to store user settings in Electron (Atom Shell) Application? 【发布时间】:2015-08-08 12:14:41 【问题描述】:我似乎找不到存储用户设置的内置机制。我希望 Electron 提供了一种跨所有桌面平台存储用户设置的标准方法。如果没有先例,我可以自己实现它,我只是不想立即跳到自定义解决方案。这方面的在线研究非常稀少。谢谢!
【问题讨论】:
我使用 localStorage 存储了我的设置,但我很想知道更多关于它如何与 Electron 一起工作的信息。由于清除 localStorage 很麻烦,并且重新安装 Electron 应用程序似乎无法清除它。 【参考方案1】:每个平台对不同类型的数据都有不同的默认位置。因此,如果您想根据平台将数据存储在默认位置,请查看app.getPath(name)
它检索与name
关联的特殊目录或文件的路径。
您还可以使用它来区分用户想要保存的数据,以及您的应用程序保存的您不想弄乱用户目录的数据。
或者,如果您只想存储与特定路径相关的文件,您可以使用
app.setPath(name,path)
【讨论】:
正是我想要的,我只是不知道这个功能存在!谢谢!【参考方案2】:我的 Electron 应用程序遇到了这个特殊问题,这篇文章启发我编写了一个名为 electron-json-storage 的 NPM 模块。
此模块允许轻松地向/从app.getPath('userData')
写入/读取 JSON:
const storage = require('electron-json-storage');
// Write
storage.set('foobar', foo: 'bar' ).then(function()
// Read
storage.get('foobar').then(function(object)
console.log(object.foo);
// will print "bar"
);
);
【讨论】:
electron-json-storage
很棒,另一个选择是lowdb
只是好奇,但 electron-json-storage 与 var someObj = JSON.parse(fs.readFileSync(path, encoding: "utf8"))
和 fs.writeFileSync(path, JSON.stringify(someObj));
相比有什么优势,即使使其异步也不会增加几行。
也看electron-settings。
很好的资源。不过,看起来该库并不像示例中那样原生支持 Promise。
您添加的每个依赖项都为漏洞利用提供了更大的表面积,又是一段必须不断更新的代码,如果您是专业开发人员,您还需要审核代码。使用整个臃肿的库来替换 2 行代码可以说是一种不好的做法。【参考方案3】:
Electron 没有为此提供任何开箱即用的东西。但是,Electron 确实为您提供了一种通过 app.getPath API 以跨平台方式获取存储用户数据的惯用位置的方法。
我想说 3 种最常见的方法是:
localStorage(或任何 html5 存储 API) 平面 JSON 文件(这是我所做的,我使用 electron-store) 嵌入式数据库,如 IndexedDB、neDB 或 sqlite您选择哪一种取决于您应用的需求。如果您只需要在渲染器进程中访问这些数据,那么我只需使用localStorage
。大多数情况下,您似乎需要同时访问主渲染器和渲染器中的数据,因此 JSON 文件是有意义的。如果您正在处理大量数据或复杂的查询,那么数据库可能是有意义的。我写了更多in detail here。
【讨论】:
【参考方案4】:LocalStorage 怎么样?如果您需要从浏览器进程中访问这些设置,您可能需要编写自己的(或仅使用实现此功能的 node.js 库)
【讨论】:
【参考方案5】:我发现最好的方法是将它存储在一个简单的文件中作为 JSON。问题是,如果您将该 JSON 存储在应用程序目录中,那么当您更新应用程序时,它将被清除。因此,您希望将其放在当前操作系统的用户设置的默认目录中。幸运!!!!有一个供节点开发人员使用的库,可以帮助您找到 userdata 目录。这个模块叫appdirectory
,我已经用过好几次了。它非常易于使用。
见APPDIRECTORY HERE
【讨论】:
或者只是getPath(userData)
【参考方案6】:
可以将数据存储在 cookie 中; Electron 有一个机制(https://electronjs.org/docs/api/cookies)并且可以在浏览器中检索 cookie(Angular:https://docs.angularjs.org/api/ngCookies/service/$cookies,React/Other:https://github.com/reactivestack/cookies)
我能够让它与 Angularjs 一起工作。
【讨论】:
以上是关于在 Electron (Atom Shell) 应用程序中存储用户设置的位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Electron / Atom Shell App 设置应用程序图标
使用 Electron (Atom Shell) 时的客户端/服务器模型是啥?