详解使用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 数组的 uniq 方法
Jan 23 Javascript
jquery星级插件、支持页面中多次使用
Mar 25 Javascript
javascript 另一种图片滚动切换效果思路
Apr 20 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
May 07 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
vue.js组件之间传递数据的方法
Jul 10 Javascript
微信小程序模拟cookie的实现
Jun 20 Javascript
vuejs简单验证码功能完整示例
Jan 08 Javascript
Vue项目中配置pug解析支持
May 10 Javascript
js new Date()实例测试
Oct 31 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 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
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
javascript 闭包疑问
2010/12/30 Javascript
js的一些常用方法小结
2011/06/29 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
Python OpenCV实现视频分帧
2019/06/01 Python
我就是这样学习Python中的列表
2019/06/02 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
办公室副主任岗位职责
2013/11/25 职场文书
《藏戏》教学反思
2014/02/11 职场文书
国窖1573广告词
2014/03/21 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
英语教育专业自荐信
2014/05/29 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
2019个人半年工作总结
2019/06/21 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript