最近我在開發一個小工具,打包后出現
Uncaught Error: ENOENT, cnblog-tool.json not found in D:\makalo-cnblog-tool\resources\app.asar
一看要寫入的路徑,我發現路徑不對,應該就是這個問題
原因分析
開發環境的路徑和生產環境的路徑不一致
解決辦法
既然知道了原因,那就好解決,既然環境不一樣,那我首先得知道如何判斷環境,找到官網
返回一個
Boolean
值,如果應用已經打包,返回true
,否則返回false
。 對於大多數應用程序,此屬性可用於區分開發和生產環境。
現在知道了如何判斷環境,那如何根據環境獲取路徑呢?
我原來用的
app.getAppPath()
現在測試得出這個是開發環境的,那生產環境的路徑怎么獲取呢?仔細看api
name
字符串-您可以通過名稱請求以下路徑:
home
用戶的 home 文件夾(主目錄)appData
每個用戶的應用程序數據目錄,默認情況下指向:
%APPDATA%
Windows 中$XDG_CONFIG_HOME
或在~/.config
Linux中~/Library/Application Support
macOS 中
userData
儲存你應用程序設置文件的文件夾,默認是appData
文件夾附加應用的名稱
緩存
temp
臨時文件夾
exe
當前的可執行文件
module
Thelibchromiumcontent
庫
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();