详解使用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模仿msgbox提示效果代码
Jun 10 Javascript
Jquery阻止事件冒泡 event.stopPropagation
Dec 11 Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
Jquery实现显示和隐藏的4种简单方式
Aug 28 Javascript
jQuery异步加载数据并添加事件示例
Aug 24 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
Oct 14 Javascript
JavaScript中诡异的delete操作符
Mar 12 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
vue中锚点的三种方法
Jul 06 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
php xml文件操作实现代码(二)
2009/03/20 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
简单谈谈favicon
2015/06/10 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
转一个日期输入控件,支持FF
2007/04/27 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
Python中的高级函数map/reduce使用实例
2015/04/13 Python
使用Python对Access读写操作
2017/03/30 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python实现自动上京东抢手机
2018/02/06 Python
python获取array中指定元素的示例
2019/11/26 Python
总经理秘书工作职责
2013/12/26 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
房屋租赁协议书
2014/10/18 职场文书
护士年终考核评语
2014/12/31 职场文书
异地恋情人节寄语
2015/02/28 职场文书
汽车质检员岗位职责
2015/04/08 职场文书