關於electron的開發應用路徑和生產路徑的問題


最近我在開發一個小工具,打包后出現

Uncaught Error: ENOENT, cnblog-tool.json not found in D:\makalo-cnblog-tool\resources\app.asar

image-20210304191940563

一看要寫入的路徑,我發現路徑不對,應該就是這個問題

原因分析

開發環境的路徑和生產環境的路徑不一致

解決辦法

既然知道了原因,那就好解決,既然環境不一樣,那我首先得知道如何判斷環境,找到官網

app.isPackaged 只讀

返回一個Boolean值,如果應用已經打包,返回true ,否則返回false 。 對於大多數應用程序,此屬性可用於區分開發和生產環境。

現在知道了如何判斷環境,那如何根據環境獲取路徑呢?

我原來用的

app.getAppPath()

現在測試得出這個是開發環境的,那生產環境的路徑怎么獲取呢?仔細看api

app.getPath(name)

  •   name
    

    字符串-您可以通過名稱請求以下路徑:

    • home 用戶的 home 文件夾(主目錄)

    •   appData
      

      每個用戶的應用程序數據目錄,默認情況下指向:

      • %APPDATA% Windows 中
      • $XDG_CONFIG_HOME或在~/.configLinux中
      • ~/Library/Application Support macOS 中
    • userData 儲存你應用程序設置文件的文件夾,默認是 appData 文件夾附加應用的名稱

    • 緩存

    • temp 臨時文件夾

    • exe當前的可執行文件

    • module The libchromiumcontent

    • desktop 當前用戶的桌面文件夾

    • documents 用戶文檔目錄的路徑

    • downloads 用戶下載目錄的路徑

    • music 用戶音樂目錄的路徑

    • pictures 用戶圖片目錄的路徑

    • videos 用戶視頻目錄的路徑

    • recent 用戶最近文件的目錄(僅Windows)。

    • logs應用程序的日志文件夾

    • crashDumps 故障轉儲的存儲目錄。

返回String-與關聯的特殊目錄或文件的路徑name。失敗時,Error拋出。

如果app.getPath('logs')在沒有先調用app.setAppLogsPath()被調用的情況下被調用,則將創建一個默認日志目錄,該目錄等同於app.setAppLogsPath()不帶path參數的調用。

其中有個exe當前的可執行文件,應該就是這個

所以路徑的正確寫法,應該是

路徑的正確寫法

該寫法能獲取到應用程序的根目錄

//當前應用的目錄
const appPath = app.isPackaged ? path.dirname(app.getPath('exe')) : app.getAppPath();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM