最近我在开发一个小工具,打包后出现
Uncaught Error: ENOENT, cnblog-tool.json not found in D:\makalo-cnblog-tool\resources\app.asar
一看要写入的路径,我发现路径不对,应该就是这个问题
开发环境的路径和生产环境的路径不一致
既然知道了原因,那就好解决,既然环境不一样,那我首先得知道如何判断环境,找到官网
app.isPackaged
只读
返回一个
Boolean
值,如果应用已经打包,返回
true
,否则返回
false
。 对于大多数应用程序,此属性可用于区分开发和生产环境。
现在知道了如何判断环境,那如何根据环境获取路径呢?
我原来用的
app.getAppPath()
现在测试得出这个是开发环境的,那生产环境的路径怎么获取呢?仔细看api
app.getPath(name)
字符串-您可以通过名称请求以下路径:
home
用户的 home 文件夹(主目录)
appData
每个用户的应用程序数据目录,默认情况下指向:
%APPDATA%
Windows 中
$XDG_CONFIG_HOME
或在~/.config
Linux中
~/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();