electron 当我使用电子锻造的网页包模板时,我如何使用不同的电子窗口的多个预加载脚本?

fbcarpbf  于 2022-12-28  发布在  Electron
关注(0)|答案(1)|浏览(232)

我使用electron forge中的typescript+webpack template
要使用webpack加载单个预加载脚本,有一个名为MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY的常量,可以从package.json设置,例如:"preload": { "js": "myPreload.ts" }。然后,根据应用程序是在调试模式还是发布模式下运行,以某种方式从Electron Forge - Webpack Plugin内解析该常数。
我有这个设置,如果你有一个或多个窗口共享同一个preload.ts脚本,它工作得很好。但是,我不知道如何为其他窗口指定多个不同的预加载脚本。
我如何使用多个不同的preload.ts脚本(用于不同的窗口)与电子锻造webpack插件?

i34xakig

i34xakig1#

实际上添加多个脚本是很简单的,但是我还没有看到这个文档,我会在这里回答我自己的问题。配置的name字段很重要,因为大写的名称将是webpack常量的前缀,(例如"name": "my_name"将导致常量被称为MY_NAME_PRELOAD_WEBPACK_ENTRY
如果你现在想添加多个预加载脚本,你必须添加多个入口点,然后你可以通过它们的名字引用它们。不幸的是,每个入口点也需要htmljs字段,但如果你不需要这些,你可以创建一个空文件,使用正确的扩展名并指向这些字段。
下面的例子可以更好地说明这几点:

"config": {
    "forge": {
      "plugins": [
        {
          "name": "@electron-forge/plugin-webpack",
          "config": {
            "mainConfig": "./webpack.main.config.js",
            "renderer": {
              "config": "./webpack.renderer.config.js",
              "entryPoints": [
                {
                  "name": "main_window",
                  "html": "./src/main_window/index.html",
                  "js": "./src/main_window/index.js",
                  "preload": {
                    "js": "./src/main_window/preload.js"
                  }
                },
                {
                  "name": "extra_preload_main_window",
                  "html": "./src/empty.html",
                  "js": "./src/empty.js",
                  "preload": {
                    "js": "./src/main_window/preload2.js"
                  }
                },
                {
                  "name": "second_window",
                  "html": "./src/second_window/index.html",
                  "js": "./src/second_window/index.js",
                  "preload": {
                    "js": "./src/second_window/preload.js"
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }

然后,它将为您提供以下(相关)常量:

// Path to renderer of main window.
declare MAIN_WINDOW_WEBPACK_ENTRY;

// Path to first preload script (of main window).
declare MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY;

// Path to the second preload script (of the main window).
declare EXTRA_PRELOAD_MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY;

// Preload and renderer scripts for other window.
declare SECOND_WINDOW_WEBPACK_ENTRY;
declare SECOND_WINDOW_PRELOAD_WEBPACK_ENTRY;

从技术上讲你当然也会得到

declare EXTRA_PRELOAD_MAIN_WINDOW_WEBPACK_ENTRY;

但是它指向空文件/网络包输出。

相关问题