Electron使用electron-forge打包后运行无法创建log目录报ENOENT错误
问题原因
错误的核心诱因如下:
- 开发模式下应用的运行工作目录是你的项目根目录,你对该路径有读写权限,使用相对路径
log创建目录不会触发异常 - Mac系统下打包后的
.app应用默认运行时的工作目录为应用包内部的只读资源路径/Applications/[应用名].app/Contents/Resources/,普通用户无该路径的写入权限,直接用相对路径创建log目录会触发写入失败报错
解决方案
将日志存储路径修改为Electron提供的用户级可写目录即可,操作步骤如下:
- 在主进程中引入
app模块,使用app.getPath('userData')获取当前应用专属的用户数据目录,该目录默认路径为~/Library/Application Support/[你的应用名],用户默认拥有完整读写权限 - 将日志目录的绝对路径拼接为该路径下的子目录,示例代码:
const { app } = require('electron'); const path = require('path'); const fs = require('fs'); // 生成合法可写的日志目录绝对路径 const logDir = path.join(app.getPath('userData'), 'log'); // 递归创建目录,避免上级目录不存在时报错 fs.mkdirSync(logDir, { recursive: true });
注意必须给
mkdirSync添加recursive: true参数,避免路径层级缺失时抛出异常
- 如果你使用第三方日志库(如
electron-log),直接修改日志存储路径配置即可,示例:
const log = require('electron-log'); log.transports.file.resolvePath = () => path.join(app.getPath('userData'), 'log', 'main.log');
验证步骤
- 重新执行
electron-forge package命令打包 - 安装后启动应用,打开
~/Library/Application Support/[你的应用名]/log目录即可看到生成的日志文件
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

