分解:ð-具有增强DX的可扩展和类型安全电子IPC管理工具
#javascript #typescript #electron #dx

电子IPC很好,但是很难维护和扩展,要么是因为您必须记住的许多通道,要么是因为过程之间的API不一致,并且没有推断的通道和处理程序类型。这些是解释性解决方案的一些事情!

ð¬功能

  • ð-and-class dx具有全型API
  • ð§
  • 一致且一致
  • ð¥ - 类型安全和可伸缩
  • - 代码分割支持
  • ð©连接的所有边缘(处理所有过程的API)
  • ð-invokehandle方法在两个过程中都具有相同的预期行为

ð建筑物

在您的终端中,运行:

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-)等。请参阅知识部分以获取更多!

ð知识