Wo werden Benutzereinstellungen in der Electron (Atom Shell) -Anwendung gespeichert?

80

Ich kann anscheinend keinen integrierten Mechanismus zum Speichern von Benutzereinstellungen finden. Ich hatte gehofft, dass Electron eine Standardmethode zum Speichern von Benutzereinstellungen auf allen Desktop-Plattformen bietet. Wenn es dafür keinen Präzedenzfall gibt, kann ich ihn selbst implementieren. Ich wollte einfach nicht sofort zu einer benutzerdefinierten Lösung springen. Online-Forschung ist in diesem Bereich ziemlich spärlich. Vielen Dank!

CodeManiak
quelle
1
Ich habe meine Einstellungen mit localStorage gespeichert, bin aber sehr daran interessiert, mehr darüber zu erfahren, wie dies mit Electron funktioniert. Da es unübersichtlich ist, localStorage zu löschen und eine Neuinstallation einer Electron-App nicht zu löschen scheint.
E. Sundin

Antworten:

73

Jede Plattform verfügt über unterschiedliche Standardspeicherorte für unterschiedliche Datentypen. Wenn Sie also Daten basierend auf der Plattform an Standardspeicherorten speichern möchten, checken Sie ausapp.getPath(name)

Es ruft einen Pfad zu einem speziellen Verzeichnis oder einer Datei ab, die mit verknüpft sind name.

Sie können es auch verwenden, um zwischen Daten zu unterscheiden, die der Benutzer speichern möchte, und Daten, die Ihre Anwendung speichert, damit Sie die Benutzerverzeichnisse nicht überladen.

Oder wenn Sie nur Dateien speichern möchten, die relativ zu einem bestimmten Pfad sind, können Sie die verwenden app.setPath(name,path)

Josh
quelle
Genau das, wonach ich gesucht habe, ich wusste einfach nicht, dass diese Funktion existiert! Vielen Dank!
CodeManiak
42

Ich hatte dieses spezielle Problem mit meiner Electron-App und dieser Beitrag hat mich dazu inspiriert, ein NPM-Modul namens Electron-JSON-Storage zu schreiben .

Dieses Modul ermöglicht das einfache Schreiben / Lesen von JSON zu / von 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"
    });

});
jviotti
quelle
electron-json-storageist fantastisch, eine andere Wahl istlowdb
JUO
6
Nur neugierig, aber was ist der Vorteil von Electron-JSON-Speicher gegenüber Just var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))und fs.writeFileSync(path, JSON.stringify(someObj)});Selbst wenn es asynchron gemacht wird, werden nicht mehr als ein paar Zeilen hinzugefügt.
Gman
3
Schauen Sie sich auch die Elektroneneinstellungen an .
k7sleeper
Tolle Ressource. Es sieht jedoch so aus, als würde die Bibliothek Versprechen nicht nativ unterstützen, wie Sie es im Beispiel getan haben.
Keith Holliday
1
Jede von Ihnen hinzugefügte Abhängigkeit ist eine größere Fläche für Exploits, ein weiterer Code, der ständig aktualisiert werden muss. Wenn Sie ein professioneller Entwickler sind, müssen Sie den Code auch prüfen. Es ist wohl eine schlechte Praxis, eine ganze aufgeblähte Bibliothek zu nehmen, nur um 2 Codezeilen zu ersetzen.
Gman
14

Electron gibt Ihnen dafür nichts "out of the box". Electron bietet Ihnen jedoch eine Methode, um den idiomatischen Speicherort für Benutzerdaten plattformübergreifend über die API app.getPath abzurufen .

Ich würde sagen, die 3 häufigsten Möglichkeiten, dies zu tun, sind:

  • localStorage (oder eine beliebige HTML5-Speicher-API)
  • flache JSON-Datei (das ist, was ich tue, und ich benutze dafür den Elektronenspeicher )
  • eingebettete Datenbank wie IndexedDB, neDB oder SQLite

Welches Sie auswählen, hängt von den Anforderungen Ihrer App ab. Wenn Sie nur im Renderer-Prozess auf diese Daten zugreifen müssen, würde ich nur verwenden localStorage. Meistens müssen Sie auf die Daten sowohl im Haupt- als auch im Renderer zugreifen, daher ist eine JSON-Datei sinnvoll. Wenn Sie mit vielen Daten oder komplexen Abfragen zu tun haben, ist eine Datenbank möglicherweise sinnvoll. Ich habe hier ausführlicher darüber geschrieben .

ccnokes
quelle
5

Wie wäre es mit LocalStorage? Wenn Sie über den Browserprozess auf diese Einstellungen zugreifen müssen, müssen Sie wahrscheinlich Ihre eigenen schreiben (oder einfach eine node.js-Bibliothek verwenden, die dies implementiert).

Ana Betts
quelle
1

Der beste Weg, den ich gefunden habe, ist es, es in einer einfachen Datei als JSON zu speichern. Das Problem ist, dass wenn Sie diesen JSON im App-Verzeichnis speichern, er beim Aktualisieren der App gelöscht wird. Sie möchten es also in das Standardverzeichnis für Benutzereinstellungen für das aktuelle Betriebssystem stellen. GLÜCKLICHERWEISE!!!!! Es gibt eine Bibliothek für Knotenentwickler, mit deren Hilfe Sie das Benutzerdatenverzeichnis finden können. Das Modul heißt appdirectoryund ich habe es mehrmals benutzt. Es ist sehr einfach zu bedienen.

Siehe APPDIRECTORY HIER

eisig
quelle
1
oder einfachgetPath(userData)
Dan