Electron (Atom Shell) 애플리케이션에서 사용자 설정을 저장할 위치는?


82

사용자 설정을 저장하는 내장 메커니즘을 찾을 수없는 것 같습니다. 전자가 모든 데스크톱 플랫폼에서 사용자 설정을 저장하는 표준 방법을 제공하기를 바라고 있습니다. 이에 대한 선례가 없다면 직접 구현할 수 있지만 즉시 사용자 지정 솔루션으로 이동하고 싶지 않았습니다. 이 분야에서 온라인 조사는 매우 드물다. 감사!


1
localStorage를 사용하여 설정을 저장했지만 이것이 Electron과 어떻게 작동하는지 더 알고 싶습니다. localStorage를 지우는 것이 지저분하고 Electron 앱을 다시 설치해도 지워지지 않는 것 같습니다.
E. Sundin 2015 년

답변:


75

각 플랫폼에는 서로 다른 종류의 데이터에 대해 서로 다른 기본 위치가 있습니다. 따라서 플랫폼에 따라 기본 위치에 데이터를 저장하려면app.getPath(name)

과 관련된 특수 디렉토리 또는 파일의 경로를 검색합니다 name.

또한이를 사용하여 사용자가 저장하려는 데이터와 사용자 디렉토리를 어지럽히 지 않으려는 애플리케이션에서 저장하는 데이터를 구분할 수 있습니다.

또는 특정 경로에 관련된 파일을 저장하려는 경우 app.setPath(name,path)


내가 찾고 있던 바로 그 기능이 존재하는지 몰랐습니다! 감사!
CodeManiak 2015-06-08

42

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

});

electron-json-storage굉장 또 다른 선택이 될 것입니다lowdb
JUO

6
그냥 궁금하지만, 단지 대 전자 JSON 스토리지의 장점이 무엇을 var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))하고 fs.writeFileSync(path, JSON.stringify(someObj)});심지어는 비동기 몇 줄보다 더 추가 할 것입니다 만들기는.
gman nov.


훌륭한 자원. 그러나 라이브러리가 예제에서와 같이 기본적으로 promise를 지원하지 않는 것 같습니다.
Keith Holliday 2017 년

1
추가하는 모든 종속성은 악용에 대한 더 큰 노출 영역이지만 지속적으로 업데이트해야하는 또 다른 코드 조각이며 전문 개발자 인 경우 코드도 감사해야합니다. 두 줄의 코드를 대체하기 위해 전체 라이브러리를 사용하는 것은 틀림없이 나쁜 습관입니다.
gman

15

Electron은 이것에 대해 상자에서 아무것도 제공하지 않습니다. 그러나 Electron은 app.getPath API 를 통해 크로스 플랫폼 방식으로 사용자 데이터를 저장하는 관용적 위치를 얻는 방법을 제공합니다 .

이를 수행하는 가장 일반적인 3 가지 방법은 다음과 같습니다.

  • localStorage (또는 HTML5 저장소 API)
  • 플랫 JSON 파일 (이것이 내가하는 일이며 전자 저장소 를 사용합니다)
  • IndexedDB, neDB 또는 sqlite와 같은 임베디드 데이터베이스

선택하는 것은 앱의 요구 사항에 따라 다릅니다. 렌더러 프로세스에서이 데이터에만 액세스해야하는 경우 localStorage. 대부분의 경우 메인 및 렌더러 모두에서 데이터에 액세스해야하는 것처럼 보이므로 JSON 파일이 의미가 있습니다. 많은 데이터 또는 복잡한 쿼리를 처리하는 경우 데이터베이스가 의미가있을 수 있습니다. 나는 이것에 대해 더 자세히 여기에 썼다 .


5

LocalStorage는 어떻습니까? 브라우저 프로세스에서 이러한 설정에 액세스해야하는 경우 직접 작성해야합니다 (또는이를 구현하는 node.js 라이브러리를 사용하면됩니다).


1

내가 찾은 가장 좋은 방법은 JSON으로 간단한 파일에 저장하는 것입니다. 문제는 해당 JSON을 앱 디렉토리에 저장하면 앱을 업데이트하면 지워진다는 것입니다. 따라서 현재 운영 체제의 사용자 설정을 위해 기본 디렉토리에 저장하려고합니다. 운 좋게!!!!! userdata 디렉토리를 찾는 데 도움이되는 노드 개발자 용 라이브러리가 있습니다. 모듈은라고 appdirectory하며 여러 번 사용했습니다. 사용하기 매우 쉽습니다.

여기에서 APPDIRECTORY 참조


1
또는 그냥getPath(userData)
Dan

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.