찾다

 >  Q&A  >  본문

Electron은 사전 로드 시 AppData를 가져옵니다.

미리 로드된 AppData 디렉토리를 얻는 방법은 무엇입니까?

배경.js

으아악

preload.js

으아악

config-manager.js

으아악

이것을 실행하면 이런 오류가 발생합니다.

으아악

이런 현상은 '앱'이 나중에 초기화되기 때문에 발생하는 것 같아요.

저의 궁극적인 목표는 AppData 디렉터리에서 json 구성을 읽는 것입니다. 더 좋은 방법이 있다면 언제든지 알려주시기 바랍니다. 사용자는 런타임에 구성을 변경할 필요가 없습니다. 하지만 defaultConfig의 기본값을 구성 파일에 쓸 수 있어야 합니다.

P粉351138462P粉351138462232일 전573

모든 응답(1)나는 대답할 것이다

  • P粉569205478

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

    app.getPath() 方法仅在应用程序“就绪”后才可用。使用 app.on('ready' () => { ... }); '준비' 이벤트를 감지합니다. 자세한 내용은 Electron의 이벤트: 'ready' 이벤트를 참조하세요.

    사용자 소개 preload.js 脚本,直接在其中包含函数有时会使内容难以阅读和理解(即使它仅由 require 实现)。目前,该文件没有关注点分离。 IE:您的“配置”功能混合在 preload 脚本中。如果您希望分离问题,那么您应该从 preload.js 文件中重构您的“配置”代码,并将其放在自己的文件中。这样,您的 preload.js 파일은 IPC 채널을 구성하고 관련 데이터(있는 경우)를 전송하는 데만 사용됩니다.


    자, app.getPath('appData') 문제를 해결하는 방법을 살펴보겠습니다.

    당신의 main.js 文件中,检测您的应用程序何时“就绪”,然后通过您的 config-manager.js 文件获取 appData 디렉토리에 있습니다.

    main.js(메인 스레드)

    으아악

    귀하의 config-manager.js 文件中,我已将您的“路径”变量移至 loadConfig() 函数范围,因为它们仅由该函数使用。如果您需要将它们公开以供文件中其他位置使用,则需要将它们移回 loadConfig() 기능 범위를 벗어났습니다.

    ElectronApp.getPath('appData')에 대한 참조를 loadConfig() 함수로 옮겼습니다. 이 함수는 애플리케이션이 "준비"된 후 ElectronApp.getPath('appData') 的引用移至 loadConfig() 函数中,因为在应用程序“就绪”后从 main.js에서 호출되기 때문입니다.

    도우미 기능pathExists()을 추가한 이유는 해당 구현이 여러 번 사용되기 때문입니다.

    드디어 getConfig() 函数,以便在需要时从应用程序主线程中的任何位置轻松获取配置对象(只要将其包含在需要使用它的文件中即可)。IE: let appConfig = require('config-manager')를 추가했습니다.

    config-manager.js(메인 스레드)

    으아악

    일반적인 preload.js 스크립트는 다음과 같습니다.

    으아악

    IPC 채널 구현과 메인 스레드 또는 렌더 스레드에서 이를 전송/수신하는 방법을 이해하는 데 도움이 필요하면 새로운 질문을 해보세요.

    회신하다
    0
  • 취소회신하다