在 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) 时的客户端/服务器模型是啥?

Atom Electron - 使用 javascript 关闭窗口

在 atom-shell 应用程序启动时隐藏光标

css dark.electron.atom.css

electron入门教程