Electron(Atom Shell)アプリケーションのどこにユーザー設定を保存しますか?


82

ユーザー設定を保存するための組み込みメカニズムが見つからないようです。私は、electronがすべてのデスクトッププラットフォームにわたってユーザー設定を保存するための標準的な方法を提供することを望んでいました。この前例がない場合は、自分で実装できますが、すぐにカスタムソリューションにジャンプしたくありませんでした。オンラインでの調査は、この分野ではかなりまばらです。ありがとう!


1
localStorageを使用して設定を保存しましたが、これがElectronでどのように機能するかについて詳しく知りたいと思っています。localStorageをクリアするのは面倒であり、Electronアプリを再インストールしてもクリアされないようです。
E. Sundin 2015年

回答:


75

プラットフォームごとに、さまざまな種類のデータに対してさまざまなデフォルトの場所があります。したがって、プラットフォームに基づいてデフォルトの場所にデータを保存する場合は、チェックアウトしてくださいapp.getPath(name)

に関連付けられた特別なディレクトリまたはファイルへのパスを取得しますname

また、これを使用して、ユーザーが保存したいデータと、ユーザーのディレクトリを乱雑にしたくないアプリケーションが保存したデータを区別することもできます。

または、特定のパスに関連するファイルを保存するだけの場合は、 app.setPath(name,path)


まさに私が探していたものですが、この機能が存在することを知りませんでした。ありがとう!
codeManiak 2015年

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 2016

6
興味があるだけちょうど対電子JSON-ストレージの利点何var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))fs.writeFileSync(path, JSON.stringify(someObj)});でもそれは非同期数行以上追加しないとなっては。
gman 2016年

3
電子設定も見てください。
k7sleeper 2016

素晴らしいリソース。ただし、ライブラリは、例のようにネイティブでPromiseをサポートしていないようです。
キースホリデイ2017

1
追加するすべての依存関係は、エクスプロイトの表面積が大きくなりますが、コードは常に更新する必要があります。プロの開発者の場合は、コードを監査する必要もあります。2行のコードを置き換えるためだけに、肥大化したライブラリ全体を取得することは、間違いなく悪い習慣です。
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)
ダン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.