运行 同时在本地运行同一个 Electron 应用程序的两个实例

Run two instances of same Electron app locally at same time

我正在使用 Electron 开发一个聊天应用程序,并且想要 运行 同一个 Electron 应用程序的两个实例同时 运行 以进行调试。

我使用 Electron Forge 实例化了默认使用端口 3000 的项目,并尝试 运行 另一个进程中的相同应用程序导致地址已在使用错误。

对此进行了一些研究,发现了 运行 和 , along with how to change the default port on Electron Forge 的方法。

我考虑过将 Electron 应用 运行 放在随机生成的端口号上以避免占用相同的端口号,但我想知道是否有更简单的方法来做到这一点。

下面附上错误消息:

An unhandled exception has occurred inside Forge:
listen EADDRINUSE: address already in use :::3000
Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1334:16)
    at listenInCluster (node:net:1382:12)
    at Server.listen (node:net:1469:7)
    at /Users/userabc/src/p2p-tool/src/app/node_modules/webpack-dev-server/lib/Server.js:771:30
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at /Users/userabc/src/p2p-tool/src/app/node_modules/@electron-forge/plugin-webpack/src/WebpackPlugin.ts:307:22

谢谢!

这是一个基本的解决方法。这是假设使用 Webpack bundler with Electron Forge。 Electron Forge 默认在端口 3000 上实例化一个 devserver,因此我们要修改端口号以能够同时 运行 多个应用程序。

  1. 使用 npm start 启动 Electron 应用程序的第一个实例
  2. 在package.json中,在@electron-forge/plugin-webpack中添加端口和loggerPort 属性以设置自定义端口和/或loggerport。示例如下所示。这个post goes into more detail on why this works.
    "config": {
        "forge": {
          "packagerConfig": {
            "name": "Electron starter",
            "executableName": "electron-starter",
            "icon": "assets/icon",
            "extraResource": [
              "assets"
            ]
          },
          "plugins": [
            [
              "@electron-forge/plugin-webpack",
              {
                  //Your code goes here to specify a new port and loggerPort
                  "port": "3001",
                  "loggerPort": "9001",
              
                "mainConfig": "./webpack/main.webpack.js",

                //More config options...

  1. 在终端的新进程中,使用 npm start 启动 Electron 应用程序的同一个第二个实例。这将在您指定的自定义端口上 运行,而第一个实例仍在端口 3000 上 运行ning。

这对于重复使用来说很笨重,所以我欢迎更好的解决方案。