项目作者: tangdaohai

项目描述 :
async request for ipc. use it like http request, so easy.
高级语言: TypeScript
项目地址: git://github.com/tangdaohai/electron-happy-ipc.git
创建时间: 2020-05-17T15:56:38Z
项目社区:https://github.com/tangdaohai/electron-happy-ipc

开源协议:

下载


electron-happy-ipc

Github Actions Testcodecov.io

electron-happy-ipc 基于 electron IPC 进行二次封装,使 IPC 的方式像 http 请求一样方便简单。

Why it

在 electron 中,如果使用要使用 node API,则需要使用 Renderer ProcessMain Process 发起通信(IPC),然后 Main Process 中处理相关逻辑。

而 IPC 通信则需要两个进程都需要先监听一个事件,在 SPA 带有生命周期的场景中,Renderer Process 还需要监听、销毁等繁琐操作。且代码可读性差也不易于后期维护。

Quick start

  1. install

    1. yarn add electron-happy-ipc
    2. #或者
    3. npm install -S electron-happy-ipc
  2. import

    1. 在 Main Process 中引用,类似 Koa router 的使用方式,作为 controller 方式管理
    2. 在 Renderer Process 中引用,类似于 axios 使用方式
    • Main Process

      1. import server from 'electron-happy-ipc/server'
      2. server.use('test', async (ctx, data) => {
      3. // data => { a: 1 } from Renderer Process
      4. const result = await doSomething(data)
      5. ctx.reply(['1', '2', '3'])
      6. })
    • Renderer Process

      这里以 react 组件举例说明

  1. ```react
  2. import React, { useState, useEffect } from 'react'
  3. import request from 'electron-happy-ipc/request'
  4. export default function IpcTest () {
  5. const [list, setList] = useState([])
  6. useEffect(() => {
  7. init()
  8. }, [])
  9. const init = async () => {
  10. // request 取代 ipcRenderer.send 和 ipcRenderer.on
  11. const result = await request('test', { a: 1 })
  12. // result => ['1', '2', '3'] from Main Process
  13. setList(result)
  14. }
  15. }
  16. ```

API

cover

boolean 可选

默认 false。多次调用,避免后续处理逻辑执行多次。

比如发起一个分页请求,点击第 2 页后,紧接着又点击了第 3 页,假如 第 2 页 的请求执行时间大于 第 3 页请求执行时间,那第 3 页的响应会先被 resolve,接着第 2 页的响应又被 resolve 了。

结果就是当前要展示第 3 页,但数据却是第 2 页的。

注意:设置 cover 仍会向 Main Process 发送两次通信

  1. const init = async () => {
  2. try {
  3. const result = await request({
  4. url: 'test',
  5. data: { a: 1 },
  6. replace: true
  7. })
  8. console.log(result)
  9. } catch (err) {
  10. // 第一次调用 reject
  11. }
  12. }
  13. init() // 假如 init 需要 500ms 才会返回
  14. init() // 紧接着再次调用,上一次的 init 会立刻 reject。
timeout

number 可选

单位:ms(毫秒)

默认。设置此次请求的超时时间。

主要当传递 0 时,不生效。

全局 API

setConfig

设置全局配置。

  1. import request, { setConfig } from 'electron-happy-ipc/request'
  2. // 所有的 request 都会生效
  3. setConfig({
  4. replace: true,
  5. timeout: 1000 * 60
  6. })
  7. // 还原全局设置
  8. setConfig()

License

MIT