详解使用webpack+electron+reactJs开发windows桌面应用


Posted in Javascript onFebruary 01, 2019

electron是一两年前挺火的一个框架

本质上是一个浏览器,但是集成了很多windows系统的功能,让前端开发也可以直接操作windows的窗体,做成一个实打实的桌面软件

(当然听说mac上也可以用electron,不过没试过)

(没错我还在用windows,不是mac也不是linux,我是个lowB)

团队主要的技术栈是react,所以考虑用react开发,方便维护。

PS.由于项目是大半年前做的,所以一些细节可能记忆有误请见谅

几个重点:

1.想要能调试必须使用webpack打包,不能用react那些常用的打包脚手架,因为webpack打包有target: "electron-main"

2.对于不使用electron模块的项目,electron可以直接跑任何网页;对于用到electron模块的项目,如果不设置target: "electron-main",而直接用webpack打包(或者其他的打包工具),打包工具会直接默认把electron模块一起打包进去。而electron模块里会用到node的比如fs模块,这些模块都不允许在网页上调用,因为需要直接访问电脑文件

下面开始

我们知道electron其实是有两个部分的,一个是窗体部分,一个是窗体里运行的网页项目

窗体部分通常放在根目录下,只使用main.js一个文件来控制

网页项目部分一般放在src目录下,打包出来的文件放到dist目录下

目录大致如下

详解使用webpack+electron+reactJs开发windows桌面应用

main.js文件里会对窗体部分做很多配置

具体可以参见electron的官方文档:electron官方文档

mainWnd = new BrowserWindow({
  // 窗体配置参数
});
mainWnd.loadURL(`file://${__dirname}/dist/index.html`); //这句话是用于配置窗体加载的网页项目的,配置为打包后的目录

网页项目部分使用ipc模块与electron的窗体部分的ipcMain模块进行通信,网页项目部分可以发送以某个指令给窗体部分

网页项目部分发送指令

// src/MyComponent.js
const ipc = require('electron').ipcRenderer;
ipc.send('logout');

窗体部分接收到指令后做相应的行为

//main.js

ipcMain.on('logout', function (event, arg) {
  // do something
  console.log('logint');
});

窗体部分也可以使用webContent模块与网页项目部分通信

比如用户点击关闭窗体,可以使用event.preventDefault();阻塞关闭,然后通知网页项目部分,做退出登录的行为,退登完成之后再关闭窗体

// main.js 

mainWnd.webContents.send('mainWnd-close');

网页项目部分做对应的行为

比如退出登录,退出登录完成后,也使用ipc通知窗体部分,窗体接收到'logout-succ'后,执行关闭窗体的行为。

// src/MyComponent.js

ipc.on('mainWnd-close', () => {
  // do something
  ipc.send('logout-succ');
})

·在开发项目时,可以先用网页的形式开发项目,等到网页项目部分差不多完成后,再注入electron中,开发网页项目部分和窗体部分的交互

·在webpack中使用target: "electron-main"后,webpack将不会打包有关eletron的代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 常用函数
Dec 30 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
Mar 09 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
JavaScript异步编程:异步数据收集的具体方法
Aug 19 Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
Apr 04 Javascript
jQuery Mobile 和 Kendo UI 的比较
May 05 Javascript
JS简单生成由字母数字组合随机字符串示例
May 25 Javascript
微信小程序中this.data与this.setData的区别详解
Sep 17 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
如何用threejs实现实时多边形折射
May 07 Javascript
原来JS还可以这样拆箱转换详解
Feb 01 #Javascript
微信小程序拍照和摄像功能实现方法示例
Feb 01 #Javascript
微信小程序常用简易小函数总结
Feb 01 #Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 #Javascript
angular中如何绑定iframe中src的方法
Feb 01 #Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 #Javascript
JS集合set类的实现与使用方法示例
Feb 01 #Javascript
You might like
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
js控制表单操作的常用代码小结
2013/08/15 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
Python实现身份证号码解析
2015/09/01 Python
python数据结构之列表和元组的详解
2017/09/23 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Python PO设计模式的具体使用
2019/08/16 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
python计算n的阶乘的方法代码
2019/10/25 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
兼职学生的自我评价
2013/11/24 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
毕业生实习证明
2014/09/19 职场文书
校本培训个人总结
2015/02/28 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python