検索

ホームページ  >  に質問  >  本文

Electron はプリロード時に AppData を取得します

プリロードされた AppData ディレクトリを取得するにはどうすればよいですか?

Background.js

リーリー

preload.js

リーリー

config-manager.js

リーリー

これを実行すると、このエラーが発生します。

リーリー

これは、後で「アプリ」が初期化されるためだと思います。

私の最終的な目標は、AppData ディレクトリから json 構成を読み取ることです。 これを行うより良い方法があれば、お気軽にお知らせください。 ユーザーは実行時に構成を変更できる必要はありません。ただし、defaultConfig からのデフォルト値を構成ファイルに書き込むことができる必要があります。

P粉351138462P粉351138462256日前611

全員に返信(1)返信します

  • P粉569205478

    P粉5692054782024-04-07 00:44:04

    app.getPath() このメソッドは、アプリケーションが「準備完了」している場合にのみ使用できます。 app.on('ready' () => { ... }); を使用して、「ready」イベントを検出します。詳細については、Electron の Events: 'ready' イベントを参照してください。

    preload.js スクリプトに関して、関数を直接組み込むと、内容が読みにくく理解しにくくなる場合があります (たとえ require によってのみ実装されていたとしても)。現在、この文書には懸念の分離がありません。 IE: 「構成」機能が preload スクリプトに組み込まれています。問題を分離したい場合は、preload.js ファイルから「config」コードをリファクタリングし、それを独自のファイルに配置する必要があります。このように、preload.js ファイルは、IPC チャネルを構成し、関連するデータ (存在する場合) を転送するためにのみ使用されます。


    さて、app.getPath('appData') 問題を解決する方法を見てみましょう。

    main.js ファイルで、アプリケーションが「準備完了」になったことを検出し、config-manager.js ファイル経由で appData を取得します。内容の。

    main.js

    (メインスレッド) リーリー


    config-manager.js

    ファイルで、「パス」変数を​​ loadConfig() 関数スコープに移動しました。これは、これらの変数がその関数でのみ使用されるためです。ファイル内の別の場所で使用するためにそれらを公開する必要がある場合は、それらを loadConfig() 関数スコープの外に戻す必要があります。 ElectronApp.getPath('appData')

    への参照を

    loadConfig() 関数に移動しました。これは、アプリケーションが main.js# から「準備完了」した後であるためです。 ## この関数を呼び出します。 ヘルパー関数 pathExists() の実装は複数回使用されるため、この関数を追加しました。

    最後に、必要に応じてアプリケーションのメインスレッドのどこからでも構成オブジェクトを簡単に取得できるように、getConfig() 関数を追加しました (使用する必要があるファイルにこの関数を含めるだけです)それ )。 IE:

    let appConfig = require('config-manager')

    config-manager.js(メインスレッド)

    リーリー

    典型的な preload.js

    スクリプトは次のようになります。
    リーリー

    IPC チャネルの実装と、メイン スレッドまたはレンダリング スレッドでそれらを送受信する方法を理解するためのサポートが必要な場合は、新しい質問をしてください。

    返事
    0
  • キャンセル返事