¿Dónde almacenar la configuración del usuario en la aplicación Electron (Atom Shell)?

82

Parece que no puedo encontrar un mecanismo integrado para almacenar la configuración del usuario. Esperaba que electron proporcionara un método estándar para almacenar la configuración del usuario en todas las plataformas de escritorio. Si no hay un precedente para esto, puedo implementarlo yo mismo, simplemente no quería saltar a una solución personalizada de inmediato. La investigación en línea es bastante escasa en esta área. ¡Gracias!

CodeManiak
fuente
1
Guardé mi configuración usando localStorage pero estoy muy interesado en saber más sobre cómo funciona esto con Electron. Dado que es complicado borrar localStorage y una reinstalación de una aplicación Electron no parece borrarlo.
E. Sundin

Respuestas:

75

Cada plataforma tiene diferentes ubicaciones predeterminadas para diferentes tipos de datos. Entonces, si desea almacenar datos en ubicaciones predeterminadas según la plataforma, consulteapp.getPath(name)

Recupera una ruta a un directorio especial o archivo asociado con name.

También puede usarlo para diferenciar entre los datos que el usuario desea guardar y los datos que guarda su aplicación y que no desea saturar los directorios de usuarios.

O si solo desea almacenar archivos relacionados con una ruta específica, puede usar el app.setPath(name,path)

Josh
fuente
Exactamente lo que estaba buscando, ¡simplemente no sabía que existía esta función! ¡Gracias!
CodeManiak
42

Me enfrenté a este problema particular con mi aplicación Electron y esta publicación me inspiró a escribir un módulo de NPM llamado electron-json-storage .

Este módulo permite escribir / leer JSON fácilmente a / desde 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
fuente
electron-json-storagees impresionante, otra opción eslowdb
JUO
6
Solo por curiosidad, pero ¿cuál es la ventaja de electron-json-storage frente a just var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))e fs.writeFileSync(path, JSON.stringify(someObj)});incluso hacerlo asincrónico no agregaría más que unas pocas líneas?
gman
3
También mire la configuración de electrones .
k7sleeper
Gran recurso. Sin embargo, parece que la biblioteca no admite promesas de forma nativa como en el ejemplo.
Keith Holliday
1
Cada dependencia que agregas es un área de superficie más grande para exploits, otro fragmento de código que debe actualizarse constantemente, y si eres un desarrollador profesional, también necesitas auditar el código. Podría decirse que es una mala práctica tomar toda una biblioteca hinchada solo para reemplazar 2 líneas de código.
gman
15

Electron no le da nada fuera de la caja para esto. Sin embargo, Electron le brinda un método para obtener la ubicación idiomática de almacenamiento de datos de usuario en una forma multiplataforma a través de la API app.getPath .

Yo diría que las 3 formas más comunes de hacer esto son:

  • localStorage (o cualquier API de almacenamiento HTML5)
  • archivo JSON plano (esto es lo que hago, y uso electron-store para ello)
  • base de datos incrustada como IndexedDB, neDB o sqlite

El que elija dependerá de las necesidades de su aplicación. Si solo necesita acceder a estos datos en el proceso de renderizado, simplemente usaría localStorage. La mayoría de las veces, parece que necesita acceder a los datos tanto en el principal como en el renderizador, por lo que un archivo JSON tiene sentido. Si está tratando con muchos datos o consultas complejas, entonces tal vez una base de datos tenga sentido. Escribí sobre esto con más detalle aquí .

ccnokes
fuente
5

¿Qué tal LocalStorage? Si necesita acceder a estas configuraciones desde el proceso del navegador, probablemente necesite escribir las suyas propias (o simplemente usar una biblioteca node.js que implemente esto)

Ana Betts
fuente
1

La mejor forma que he encontrado es almacenarlo en un archivo simple como JSON. El problema es que si almacena ese JSON en el directorio de la aplicación, cuando actualice la aplicación, se eliminará. Entonces, desea ponerlo en el directorio predeterminado para la configuración del usuario para el sistema operativo actual. ¡¡¡¡¡POR SUERTE!!!!! Hay una biblioteca para desarrolladores de nodos que le ayudará a encontrar el directorio de datos de usuario. El módulo se llama appdirectoryy lo he usado varias veces. Es extremadamente fácil de usar.

Ver APDIRECTORIO AQUÍ

escarchado
fuente
1
o simplementegetPath(userData)
Dan