I want to be able to use the EventEmitter class from the events library in the renderer process of my Electron app. Here is my code:
preload.js
const { EventEmitter } = require('events')
contextBridge.exposeInMainWorld('electron', {
...
ipcRenderer: {
send: (channel, ...args) => ipcRenderer.send(channel, ...args),
invoke: (channel, ...args) => ipcRenderer.invoke(channel, ...args),
on: (channel, listener) => ipcRenderer.on(channel, listener),
removeListener: (channel, listener) => ipcRenderer.removeListener(channel, listener),
sendSync: (channel, ...args) => ipcRenderer.sendSync(channel, ...args),
removeAllListeners: (channel, ...args) => ipcRenderer.removeAllListeners(channel, ...args),
},
EventEmitter: EventEmitter
})
renderer.js
const EventEmitter = window.electron.EventEmitter
class MyClass extends EventEmitter {
constructor () {
super()
...
}
method1() { this.emit('send', this.element) }
}
I have this error:
TypeError: this.emit is not a function
My preload work fine when with ipcRenderer.
I need a way to load a class, along with its methods, into the renderer process.