在Electron(Atom Shell)应用程序中存储用户设置的位置?

Cod*_*iak 72 electron

我似乎无法找到存储用户设置的内置机制.我希望电子提供了一种在所有桌面平台上存储用户设置的标准方法.如果没有先例,我可以自己实现它,我只是不想立即跳转到自定义解决方案.该领域的在线研究相当稀少.谢谢!

Jos*_*osh 67

每个平台都有不同类型数据的不同默认位置.因此,如果您想基于平台将数据存储在默认位置,请查看app.getPath(name)

它检索与特定目录或文件关联的路径name.

您还可以使用它来区分用户想要保存的数据和应用程序保存的数据,这些数据不希望混淆用户目录.

或者,如果您只想存储与特定路径相关的文件,则可以使用 app.setPath(name,path)

  • 同意,您可以将"userData"传递给getPath(name)函数并在那里保存配置文件.例如,Visual Studio Code使用此方法存储其某些配置.我写了一篇关于在Electron中保存和恢复窗口状态的帖子,我也是这样做的:http://www.mylifeforthecode.com/saving-and-restoring-window-state-in-electron/. (9认同)

jvi*_*tti 41

我的Electron应用程序遇到了这个特殊问题,这篇文章激发了我写一个名为electron-json-storage的NPM模块.

该模块允许轻松地写入/读取JSON app.getPath('userData'):

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"
    });

});
Run Code Online (Sandbox Code Playgroud)

  • 好奇但是电子json存储的优势与`var someObj = JSON.parse(fs.readFileSync(path,{encoding:"utf8"}))`和`fs.writeFileSync(path,JSON.stringify( someObj)});`即使将其设为异步也不会增加多行. (6认同)
  • 另请参阅[电子设置](https://github.com/nathanbuchar/electron-settings). (3认同)
  • 您添加的每个依赖项都是更大的漏洞利用表面,也是另一段必须不断更新的代码,如果您是专业开发人员,您还需要审核代码。使用整个臃肿的库来替换 2 行代码可以说是不好的做法。 (2认同)

ccn*_*kes 14

Electron并没有为您提供任何开箱即用的功能.但是,Electron确实为您提供了一种方法,通过app.getPath API 以跨平台的方式获取存储用户数据的惯用位置.

我要说的最常见的3种方法是:

  • localStorage(或任何HTML5存储API)
  • 扁平的JSON文件(这是我做的,我使用电子配置)
  • 嵌入式数据库,如IndexedDB,neDB或sqlite

您选择哪一个取决于您的应用程序的需求.如果您只需要在渲染器过程中访问此数据,那么我只是使用localStorage.大多数情况下,您似乎需要访问main和renderer中的数据,因此JSON文件才有意义.如果您正在处理大量数据或复杂的查询,那么数据库可能是有意义的.我在这里详细介绍了这一点.


Ana*_*tts 5

LocalStorage怎么样?如果您需要从浏览器进程访问这些设置,您可能需要自己编写(或者只使用实现此功能的node.js库)