电子IPC很好,但是很难维护和扩展,要么是因为您必须记住的许多通道,要么是因为过程之间的API不一致,并且没有推断的通道和处理程序类型。这些是解释性解决方案的一些事情!
ð¬功能
- ð-and-class dx具有全型API
- ð§ 一致且一致
- ð¥ - 类型安全和可伸缩
- - 代码分割支持
- ð©连接的所有边缘(处理所有过程的API)
- ð-
invoke
和handle
方法在两个过程中都具有相同的预期行为
ð建筑物
在您的终端中,运行:
yarn add interprocess
# OR
npm i interprocess
- 用法
让我们构建一些简单的东西,可以向您展示一些反学的力量!
首先,在src
上创建以下文件夹:
-
shared/ipcs
(此文件夹结构是可选的)
然后,在ipcs
文件夹中创建一个名为index.ts
的文件,其中包含以下内容:
import { createInterprocess } from 'interprocess'
export const { ipcMain, ipcRenderer, exposeApiToGlobalWindow } =
createInterprocess({
main: {
async getPing(_, data: 'ping') {
const message = `from renderer: ${data} on main process`
console.log(message)
return message
},
},
renderer: {
async getPong(_, data: 'pong') {
const message = `from main: ${data} on renderer process`
console.log(message)
return message
},
},
})
在主过程中:
import { BrowserWindow, app } from 'electron'
import { ipcMain } from 'shared/ipcs'
const { handle, invoke } = ipcMain
app.whenReady().then(() => {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, '../preload/index.js'),
sandbox: false, // sandbox must be false
},
})
handle.getPing()
mainWindow.webContents.on('dom-ready', () => {
invoke.getPong(mainWindow, 'pong')
})
})
在预紧脚本中:
import { exposeApiToGlobalWindow } from 'shared/ipcs'
const { key, api } = exposeApiToGlobalWindow({
exposeAll: true, // expose handlers, invokers and removers
})
declare global {
interface Window {
[key]: typeof api
}
}
渲染器过程:
const { invoke, handle } = window.api
invoke.getPing('ping')
handle.getPong()
这是一种使用Intercocess的简单方法,但是您可以利用许多更酷的功能,例如覆盖,代码拆分,调用者的响应(用于Renderer和Main Process-)等。请参阅知识部分以获取更多!