详解使用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 相关文章推荐
IE DOM实现存在的部分问题及解决方法
Jul 25 Javascript
javascript 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
js判断某个方法是否存在实例代码
Jan 10 Javascript
jQuery添加和删除指定标签的方法
Dec 16 Javascript
jQuery中的100个技巧汇总
Dec 15 Javascript
微信小程序中吸底按钮适配iPhone X方案
Nov 29 Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 Javascript
一步一步实现Vue的响应式(对象观测)
Sep 02 Javascript
vue2路由基本用法实例分析
Mar 06 Javascript
微信小程序中使用vant框架的具体步骤
Feb 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
PHP strtr() 函数使用说明
2008/11/21 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
JQuery 入门实例1
2009/06/25 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
Python中Class类用法实例分析
2015/11/12 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
厂长助理岗位职责
2013/12/27 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
2015年教师节活动总结
2015/03/20 职场文书
Python预测分词的实现
2021/06/18 Python
用JS写一个发布订阅模式
2021/11/07 Javascript
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers