Electron 初次尝试所遇到的问题记录

Updated on with 1,117 views

初次尝试桌面开发框架 Electron,一路上遇到了不少问题和 bug,小记一下。需求很简单,在主进程中创建主窗口,并在渲染进程中创建一个新的窗口。

按照思路,这个时候我会在搜索引擎里找“Electron 如何在渲染进程中打开新窗口?”。果不其然,找到了一篇19年的文章 用 Electron创建跨平台应用多窗口 看了下操作,想着,蛮简单嘛。

首先从 electron 导入 remote,之后再在渲染进程中 new BrowserWindow。

结果发现,好家伙,从第一行就开始报错了。

const { remote } = require('electron')

这里主要出现了以下的问题:

webpack < 5 used to include polyfills for node.js core modules by default

这个问题对应 StackOverflow 有解答,laravel - BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default - Stack Overflow

但没想到他需要修改 webpack.config.js,我一看项目目录,就没有这玩意啊!

npm run eject

为了找到 webpack.config.js,搜索引擎提示我使用 npm run eject 生成配置。这里要说以下。

原来大部分依赖被 creat-react-app 封装到了 react-scripts 之中,使用 npm run eject 是为了把 creat-react-app 对 webpack、babel 等相关配置的封装全部弹出,之后我们就能对所弹出的配置进行修改。

之后接着上面的问题,先安装path-browserify npm install path-browserify --save,再修改 webpack.config.js

module.exports = function (webpackEnv) {
  ...
  return {
   ...
    resolve: {
      ...
      fallback: {
        ...
        path: require.resolve("path-browserify")
      }
    }
  }
}

'fs' can't be resolved

上面的问题解决后,没想到还有新的问题,StackOverflow 还是提示我修改 webpack.config.js

那就接着改,这里要修改返回的 target 模式,具体参考 'fs' can't be resolved

return {
  target: ['electron-main']
  ...
}

内置 remote 已被废除

后来的事情就比较魔幻了,bug 也改,页面也启动了,但发现渲染进程弹出的窗口并没有内容。这就比较郁闷了,bug 修穿了都没有出现想要的效果。

最后回到开始的起点,我在搜索引擎里找“Electron 如何在渲染进程中打开新窗口?”,看到了这篇文章 Electron学习BrowserWindow,发现 remote 已经被废除了,需要使用就需要重新安装 remote。

npm install @electron/remote --save

这下操作下来,果然不在出现之前的问题了,窗口页正常打开了,这里在主进程的代码下一定要做一次初始化。

require('@electron/remote/main').initialize()
require('@electron/remote/main').enable(mainWindow.webContents)

IPC 通讯实现打开新窗口

最后写到这里,我发现使用 IPC 的方式实现主进程和渲染进程通讯来打开窗口,也是一种不错的方法,具体做法参考 electron渲染进程与主进程互相通信


或许你遇到了和我同样的问题,以下是我在解决问题时寻找的解决方案链接:


标题:Electron 初次尝试所遇到的问题记录
作者:Jeffrey

Responses
取消