Electron 中 为什么编写的main进程的方法会进入preload脚本,导致必须判断process.type === 'browser' 是否成立才能执行代码?否则就会渲染进程报错。
比如写了一个 utils.ts 文件,直接console.log('aaaa'), 并且在main进程的主ts中引入该ts,也就是main进程会打印'aaa',但是渲染进程,页面控制台中同样也会打印'aaa',如果在utils中使用了只能main进程中使用的方法,就会报错
目前的解决方法就是判断process.type === 'browser'是否成立才执行函数。
其中有一个关键点,就是在main进程中编写了services类,执行ipcMain方法,然后通过类在preload中注册ipcRenderer,ipcMain方法会调用utils中的功能
按照官方示例做即可,Electron的主进程和渲染进行有不同的职责,交互也是有ipc通信的规范。
在 Electron 中,主进程(main process)和渲染进程(renderer process)是有明确分工的。主进程主要负责管理应用程序的生命周期、创建和管理浏览器窗口、处理系统事件等任务。渲染进程则主要负责渲染网页内容,就像在普通的浏览器环境中一样。
比如你在主进程中引入一个utils.ts文件,并且在其中有一些简单的console.log语句时,这个文件实际上会被打包进主进程的代码中。然而,由于 Electron 的模块加载机制以及预加载(preload)脚本的存在,会导致一些意外的情况。
预加载脚本(preload)是一个特殊的脚本,它在渲染进程加载网页之前运行。它的目的是为渲染进程提供一些在主进程和渲染进程之间进行通信(通过 IPC - 进程间通信)的功能。但是,预加载脚本共享了部分主进程的模块加载环境。这就意味着,在主进程中引入的模块可能会在预加载脚本中也被加载,从而导致其中的代码在预加载脚本执行时也会运行。