create-react-app和electron报错fs.existsSync is not a function

18 篇文章 1 订阅
17 篇文章 2 订阅

将create-react-app与electron创建出的一个项目中。React中无法使用electron

当在React中使用require(‘electron’)时就会报
Uncaught TypeError: fs.existsSync is not a function at getElectronPath (index.js:8)
因为React中无法使用Node.js的模块.
所以,百度了下:方案如下

  1. 创建renderer.js文件
global.electron = require('electron');
  1. 修改main.js文件

修改创建浏览器的入口代码,添加preload配置项。将renderer.js作为预加载文件

win = new BrowserWindow({
        width: 1000,
        height: 800,
        webPreferences: {
            javascript: true,
            plugins: true,
            nodeIntegration: true, // 是否集成 Nodejs
            webSecurity: false,
            preload: path.join(__dirname, '../public/renderer.js') // 但预加载的 js 文件内仍可以使用 Nodejs 的 API
        }
    })
  1. 在React组件中如下使用electron

    const electron = window.electron;

因为要使用进程通讯,所以可以在渲染进程中直接这么写:

const ipcRenderer = window.electron.ipcRenderer;

在此时,就没有那个TypeError: fs.existsSync is not a function 的报错了。
当不再报fs.existsSync is not a function错误后,开始了新的错误,

Uncaught ReferenceError: require is not defined

不知道怎么回事,我就在看我的main.js,node环境是不应该出现require没定义的报错的,所以百度了很多,所以修改了下我的几个文件:
index.html:

<script>
    window.electron = require('electron');
  </script>
  <div id="root"></div>

main.js:

win = new BrowserWindow({
        width: 1000,
        height: 800,
        webPreferences: {
            nodeIntegration: true, // 是否集成 Nodejs,把之前预加载的js去了,发现也可以运行
        }
    })

在引用这个的渲染进程中:

getName = (e) =>{
        e.preventDefault()
        const ipcRenderer = window.electron.ipcRenderer;
        // console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"

        // ipcRenderer.on('asynchronous-reply', (event, arg) => {
        //     console.log(arg) // prints "pong"
        // })
        ipcRenderer.send('asynchronous-message', 'ping')
        // ipcRenderer.send('get-reader-list', '')
    }

然后就可以

npm run electron

完美的运行了。
可以打印出来数据

开心~~~谢谢帮助过我的人!@天道酬勤,
小小水滴,虽然不起眼,但是可以一点一点,聚集成大海!慢慢来,有时候觉得难走时,是在走上坡路,加油!
后来,重新新建了一个项目,发现两种方法都可行,可以多次尝试下。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值