更新于 
部分信息可能已经过时,请谨慎参考本文内容。

electron和vue之间的通信实现

如何在electron中使用vue进行通信

使用场景

    electron是一个基于Node.js和Chromium的桌面应用开发框架,它可以让我们使用web技术来创建跨平台的桌面应用
  vue是一个轻量级的前端框架,它可以让我们使用声明式的模板语法来构建用户界面。
  如果想要在electron中使用vue来开发界面,那么我们就需要解决一个问题:如何在electron的主进程和渲染进程之间进行通信和执行相关的逻辑

需求目的

    electron的主进程和渲染进程之间是相互隔离的,它们不能直接访问对方的变量或函数。因此,我们需要一种ipc机制来实现它们之间的通信和协作

相关实现

  • 首先,在vue中引入ipcRenderer模块。例如:
    1
    2
    const electron = require('electron');
    const ipc = electron.ipcRenderer;
  • 其次,在主进程中引入ipcMain模块。由于主进程运行在Node.js环境中,我们可以直接使用import或者require方法来引入ipcMain模块。例如:
    1
    2
    3
    import { ipcMain } from 'electron';
    // 或者
    const { ipcMain } = require('electron');
  • 然后,在渲染进程中向主进程发送消息或者监听主进程发送的消息。我们可以使用ipcRenderer.send方法来向主进程发送消息,并且指定一个channel作为消息类型;我们也可以使用ipcRenderer.on方法来监听主进程发送的消息,并且指定一个channel作为消息类型。例如:
    1
    2
    3
    4
    5
    6
    // 在渲染进程中向主进程发送消息
    ipcRenderer.send('readFileDir', 'Hello from vue');
    // 在渲染进程中监听主进程发送的消息
    ipcRenderer.on('readFileDir_status', (event, data) => {
    console.log(data); // dir from electron
    });
  • 接着,在主进程中接收或者发送消息。我们可以使用ipcMain.on方法来接收渲染进程发送的消息,并且指定一个channel作为消息类型;我们也可以使用event.reply方法来向发送消息的渲染进程回复消息,并且指定一个channel作为消息类型。例如:
    1
    2
    3
    4
    5
    6
    // 在主进程中接收渲染进程发送的消息
    ipcMain.on('readFileDir', (event, data) => {
    console.log(data); // Hello from vue
    // 在主进程中向发送消息的渲染进程回复消息
    event.reply('readFileDir_status', 'dir from electron');
    });

相关结论

    通信的核心原理是基于事件驱动的

相关参考