Electron中dialog弹窗为啥在打包后不显示?
我在开发时用 dialog.showOpenDialog 能正常弹出文件选择框,但用 electron-builder 打包成 exe 后点击没反应,控制台也没报错,这是啥情况?
主进程里是这么写的:
const { dialog } = require('electron');
ipcMain.handle('open-file-dialog', async () => {
const result = await dialog.showOpenDialog({
properties: ['openFile']
});
return result.filePaths;
});
渲染进程调用也没问题,开发环境一切正常,就打包后失效了……是不是权限问题还是路径问题?
dialog.showOpenDialog 在开发环境正常,打包后失效,基本就是 asar 打包的锅。electron 把整个 app 打成压缩包后,某些 native 模块会抽风。
解决办法很简单,在你的 electron-builder 配置文件(package.json 或者 electron-builder.yml)里加上 asarUnpack:
如果还不行,可能是 preload 脚本那边的问题。检查一下打包后 preload 路径对不对,很多人是这里翻车的:
还有个容易忽略的点:确认打包后你的 preload.js 确实在 dist 目录里,有时候没配置好会漏掉。
你先试试加 asarUnpack,十有八九能解决。