详解使用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 相关文章推荐
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
一段利用WSH修改和查看IP配置的代码
May 11 Javascript
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
Jul 29 Javascript
JavaScript Array对象详解
Mar 01 Javascript
浅谈Node.js:理解stream
Dec 08 Javascript
VueJs与ReactJS和AngularJS的异同点
Dec 12 Javascript
jQuery实现火车票买票城市选择切换功能
Sep 15 jQuery
在vscode中统一vue编码风格的方法
Feb 22 Javascript
vue百度地图 + 定位的详解
May 13 Javascript
微信小程序仿通讯录功能
Apr 09 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 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
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
js中的reduce()函数讲解
2019/01/18 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python中set()函数简介及实例解析
2018/01/09 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
Linux的主要特性
2014/10/06 面试题
会计系个人求职信范文分享
2013/12/20 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
观后感的写法
2015/06/19 职场文书
医院保洁员管理制度
2015/08/05 职场文书
python之基数排序的实现
2021/07/26 Python
一篇文章弄懂Python中的内建函数
2021/08/07 Python