使用反应成分的电子api

时间:2018-08-07 15:29:45

标签: reactjs electron

我正在使用电子进行反应,反应应用是使用create-react-app样板创建的。我需要使用电子API打开外部链接,但是此任务是通过react组件实现的。我将远程电子导入了反应组件内部(以便访问当前窗口。)但这给了我一个错误

const {remote} = require("electron")

错误是由电子本身node_modules/electron/index.js引起的,而问题出在 fs 模块,它说:

TypeError: fs.existsSync is not a function

此错误显示在电子窗口中。

3 个答案:

答案 0 :(得分:0)

使用react-create-app遇到相同的问题。

此修复程序,在React端使用window.require而不是import

const electron = window.require("electron")

在电子方面,创建BrowserWindow时,请按照以下步骤添加nodeIntegration: true

mainWindow = new BrowserWindow({
    width: 900,
    height: 680,
    webPreferences: { nodeIntegration: true }
});

答案 1 :(得分:0)

对于打字稿:

import { IpcRenderer } from 'electron';

declare global {
  interface Window {
    require: (module: 'electron') => {
      ipcRenderer: IpcRenderer
    };
  }
}

const { ipcRenderer } = window.require('electron');

请参见https://github.com/electron/electron/issues/9920

答案 2 :(得分:0)

以上答案不是最新的。

正确答案如下:

从 Electron v12 开始,设置 nodeIntegration: true 没有任何影响。相反,您需要设置 contextIsolation: false:

mainWindow = new BrowserWindow({
    // ...
    webPreferences: {
        contextIsolation: false,
    }
})

https://github.com/electron/electron/issues/7300#issuecomment-799093768