详解使用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 相关文章推荐
myeclipse安装jQuery插件的方法
Mar 29 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
Grunt入门教程(自动任务运行器)
Aug 06 Javascript
javascript禁止超链接跳转的方法
Feb 02 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
Javascript中字符串和数字的操作方法整理
Jan 22 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
ZK中使用JS读取客户端txt文件内容问题
Nov 07 Javascript
Vue绑定用户接口实现代码示例
Nov 04 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 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关联链接常用代码
2012/11/05 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Python tkinter模版代码实例
2020/02/05 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
股权转让意向书
2014/04/01 职场文书
计算机专业自荐信
2014/05/24 职场文书
电子商务专业求职信
2014/07/10 职场文书
春节慰问简报
2015/07/21 职场文书
如何做好员工培训计划?
2019/07/09 职场文书