Electron - preload.js 未加载并且在 Windows 10 上发生错误

Electron - preload.js is not loaded and error is occurred on Windows 10

当我在 Windows 10 上构建 npm start 应用程序时,它无法正常运行,但在 macOS 上运行良好。

package.json

{
  "name": "SimpleTimer",
  "version": "1.0.0",
  "productName": "SimpleTimer",
  "copyright": "",
  "description": "",
  "main": "main.js",
  "scripts": {
    "start": "node_modules/.bin/electron .",
    "test": "echo \"Error: no test specified\" && exit 1",
  },
  "keywords": [],
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "electron": "^10.1.2"
  }
}

我收到以下错误消息。

TypeError: ipcMain.handle is not a function 适用的地方:

main.js

ipcMain.handle("ipc-timer-start", () => {
  if ( isWorking === true ) {
    return true
  }
  else {
    StartTimer();
    isWorking = true;
  }
  return true;
});

这个函数是ipcRenderer.invoke()写在preload.js的ipc通信的接收者。也就是下面源码TimerStartapi中的invoke()方法

preload.js

const { contextBridge, ipcRenderer} = require("electron");

contextBridge.exposeInMainWorld(
  "api", {
    TimerStart: () =>
        ipcRenderer.invoke("ipc-timer-start")  /*** HERE ***/
            .then(result => result)
            .catch(err => console.log(err)),

    TimerStop: () => ipcRenderer.send("ipc-timer-stop"),

    TimerReset: () => ipcRenderer.send("ipc-timer-reset"),

    DisplayTimer: (channel, listener) => {
      ipcRenderer.on("ipc-display-timer", (event, arg) => listener(arg));
    }
  }
);

当然,preload.js是在创建BrowserWindow的时候指定的。

main.js

 mainWindow = new BrowserWindow({
    title: config.name,
    width: 1024,
    height: 640,
    minWidth: 1024,
    minHeight: 640,
    webPreferences: {
      worldSafeExecuteJavaScript: true,
      nodeIntegration: false,
      contextIsolation: true,
      preload: __dirname + '/preload.js'  /*** HERE ***/
    }
  });

跳过此错误消息对话框后,我检查了 DevTools,看起来 preload.js 并未从 Unable to load preload script:.

的语句中加载

鉴于这些陈述,preload.js 似乎未正确包含在构建中,我该怎么办?

再一次,它在 macOS 上运行良好,但由于这些问题在 Windows 10 上无法正常运行。

我自己解决了这个问题。

这个问题不在 electron 中,而是在我的 Parallels Desktop for Mac 环境中。

我试图通过 Parallels 网络驱动器让 Electron 工作目录在 Windows 10 上工作,但它似乎无法正确识别构建文件路径。

目前,即使您本地安装了 Electron 而不是全局安装,它似乎也无法正确构建。

npm install electron@latest --save-dev

好像可以在macOS上构建的项目不能直接在Windows 10上构建。

Electron 是在 Windows10 上构建的“electron .”命令,似乎是在 C:\Users\[UserName]\AppData\Roaming\npm\ 路径上提取必要的文件。不知道具体原因,好像和本地安装的Electron不一致

如果你想运行你的项目在Windows10,复制项目目录并输入“npm install”命令重新安装Node模块,如Electron。它将自动重新安装 package.json.

中列出的依赖包

结果,我终于可以毫无问题地构建“node_modules/.bin/electron .”来构建它了。