详解使用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 相关文章推荐
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
js中AppendChild与insertBefore的用法详细解析
Dec 16 Javascript
JavaScript数据类型之基本类型和引用类型的值
Apr 01 Javascript
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
详解Webpack-dev-server的proxy用法
Sep 08 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
ES10的13个新特性示例(小结)
Sep 23 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
JavaScript 链表定义与使用方法示例
Apr 28 Javascript
学前端,css与javascript重难点浅析
Jun 11 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
原来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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
微信支付开发发货通知实例
2016/07/12 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
Yii核心验证器api详解
2016/11/23 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
requireJS使用指南
2016/04/27 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
银行财务部实习生的自我鉴定
2013/11/27 职场文书
4s店总经理岗位职责
2013/12/31 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
学校搬迁方案
2014/06/15 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
Python借助with语句实现代码段只执行有限次
2022/03/23 Python