pythonelectron桌面开发案例_使用Electron+React构建桌面应用

Electron发布自Kindem的博客,欢迎大家转载,但是要注意注明出处

Electron

electron是一个使用HTML、CSS、JavaScript构建跨平台桌面应用的框架。

说白了就是用这个框架,你可以在使用前端技术来开发桌面应用,原理是在本地应用上跑一个抽出来的浏览器,浏览器上放你写的页面。

你可能会问Electron的存在有什么意义,众所周知,前端技术可以让我们轻松写出漂亮易用的界面,如果你尝试过其他的桌面开发技术,想必你也应该知道其他的那些桌面开发工具开发出来的界面有多丑,而Electron轻松地解决了这个问题。而且从另外一个角度来讲,Electron也可以快速地将你的网站打包成一个原生应用发布。总之,前端技术是构建用户界面最好的选择,而Electron则为这一思想在桌面的实现奠定了基础。

聊一聊需要用到的前端技术栈

如果你已经对常见的前端技术栈有着一定了解,建议直接跳至下一节,查看electron+react项目的建立方法。

在开始我们的畅聊之前,先要说一说原始的前端技术。众所周知,传统的前端技术都是使用HTML、CSS、JavaScript这御三家来完成开发的,HTML负责页面框架、CSS负责页面样式、JavaScript负责页面动态,这三者各司其职,展现出一个完整美妙的Web世界。

随着前端的发展,这三者开始出现了这样那样的问题,每一项新前端技术的出现,都是前端的一次飞跃。

Node.js

Node.js的出现,无非是前端发展的一个里程碑,它的出现,将前端推向了一个新的高峰。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm,是全球最大的开源库生态系统。

看官网的解释你可能还是一脸懵逼,这么说吧,传统的JavaScript只能依赖浏览器而运行,而Node.js则将Chrome的浏览器引擎抽了出来并加以改进,使得JavaScript可以脱离浏览器而运行。

而npm则是Node.js的一个包管理工具,你可以使用npm安装这样那样的JavaScript包,就像python的pip那样简单。

Node.js的出现,使得这样那样的前端开发工具、框架如春笋般涌现,如Grunt、Webpack、React、Vue等等。而且JavaScript能够脱离浏览器而运行,也从某种意义上使JavaScript变成了一个跨平台Native语言。可以说,Node.js,就是如今前端的核心。

构建工具

传统的前端JavaScript开发中,会存在一些问题,最大的问题之一,就是项目文件之间的依赖问题,这一问题时常让前端开发者苦恼不已。

随着Node.js的出现,人们对JavaScript的使用方法产生了潜移默化的变化,因为JavaScript已经成为了一门脱离浏览器而存在的Native语言,人们开始将JavaScript像其他语言一样看待。

“编译”,这一概念,也自然地被人们引入了JavaScript的世界,尽管它是一门动态语言。在传统语言中,“编译”这一过程时常是将多个源文件编译并链接成一个可执行文件,“编译”的过程,无非就三个重要点:每一个源文件输出成中间件

判断各个中间件之间的相互依赖关系

根据依赖关系将中间件打包在一起构成输出

这一思想被运用到JavaScript之后,人们觉得JavaScript也应该有“编译”这一过程,用来做以下事情:将每一个JavaScript文件压缩,删去所有无效字符,输出为中间件

判断各个中间件之间的依赖关系

根据依赖关系将所有中间件打包成一个输出文件,这个输出文件中具有原来各个JavaScript中的所有功能,但是体积更小,而且依赖关系被严格限制并且无误

这就是构建工具,你可以把他们认为是JavaScript的编译器,用于产生更加适合生产使用的输出文件。

当然这只是构建工具功能的一部分,现在的构建工具往往还具有一些更加高级的功能,比如自动流程等。

现在常见的构建工具有Grunt、Webpack等。

React

React是一个用于构建用户界面的JavaScript框架,与Vue、Angular这另两大框架相并列。

React的强大之处在于用一种巧妙的思想处理了Web页面中冗余重复代码多的问题。它能将一些可重用的代码封装成一个个组件,在另外使用的时候,只需要使用组件进行实例化即可。这种思想与面向对象的思想非常相像。所以说,从思想和使用上说,React应该是一个非常成熟的框架。

前端路由

众所周知,往常Web网站中的路由是交由后端来做的,比如用户访问/match/2

这么一个url,本来应该是由后端服务器来接收请求并且做出相应的处理。但是随着Node.js和构建工具的出现,人们开始想,那么多请求都要交由后端来做岂不是很麻烦,而且从某种意义上,Web网站本身就是一个应用,其中的地址变化处理的逻辑应该在应用内部解决,只有涉及到后端需求的,才交由服务器来处理。

所以,前端路由,应运而生。

前端路由的存在意义就在于将路径逻辑交由前端来处理,而不是后端,这样能让后端专注与真正需要后端资源的请求的处理。

前端路由往往与构建工具、前端界面框架相互配合,构建工具负责将所有文件打包,而前端界面框架往往自己带有自己的前端路由框架,最后打包出来的输出文件,一般只有一个inedx.html、一个bunble.js和其他的资源文件。一个index.html,配合bunble.js,就能展现所有页面的内容。

这样既能减少请求量,又符合人们的正常思想,一个网站就是一个应用,像Native那样,应用内部的逻辑由应用自己处理,真正需要后端支援的时候才发送请求到服务器,让服务器处理,多好。

项目搭建例子:Electron+React+Ant-Design

理论上来说,目前的前端框架都能很好地配合Electron进行工作,当然你甚至可以使用原生御三家加上Node.js来进行Electron应用的开发。

在这里,我以我本人的开发喜好为例,讲解一下使用React作为前端界面框架、Ant-Design作为UI库、Electron作为Native支持的项目搭建。

接下来的操作默认你已经安装了Node.js。

安装Electron

首先,当然需要安装Electron了,进入cmd:npm install -g electron

如果无法安装尝试为npm设置代理。

我这里使用的是全局安装electron,原因是因为electron包比较大,而且运行Electron这一操作是可复用的,所以我认为全局安装electron更加合适,这里只需要安装一次electron,在哪里都能使用。

创建React项目

接下来用于我们需要使用React,所以一个在项目中启用React支持也是必不可少的,创建一个真正可用的React项目环境还是比较复杂的,这里推荐直接使用Facebook官方的create-react-app工具,使用它可以直接创建一个React项目。

使用npm全局安装它:npm install -g create-react-app

安装完create-react-app之后,我建议使用WebStorm来创建项目,因为WebStorm是现在最好的JavaScript IDE,当然如果你一定要使用命令行来创建我也没意见,只是WebStorm可以方便你之后的开发。

你安装create-react-app成功之后,就能直接在WebStorm中使用集成创建项目的方法创建一个React项目,创建项目的时候选择到React App一栏,WebStorm会自动识别到create-react-app以供你创建项目:

WebStorm创建项目

第一栏是你项目的位置,自己选一个并且取好项目名即可,第三栏如果报红色错误则说明你的create-react-app工具没能被识别或者没能被安装,请自行检查。

确认无误之后创建项目即可,创建项目之后将会自动执行指令完成之后的事情。

等下面的操作全部完成之后,你可以看到项目目录像这样:

项目结构

这时候推荐再安装一个额外的包管理工具-yarn,这个时候我们可以不用使用自己的cmd或者终端了,而可以直接使用WebStorm自带的集成终端,这个终端跟原生终端(cmd)一样,但是会自动进入项目目录下。看上方的菜单:View->Tool Windows->Terminal即可调出,在集成终端中输入:npm install -g yarn

安装yarn,以后我们将使用yarn来进行包管理而不是npm,因为yarn有着更多优点。

这时候你可以使用:yarn start

打开调试服务器,在弹出的网页中你可以直接看到React的欢迎页面,这些就是public和src目录下的文件所做的努力。

但是接下来,我们需要把他们全部删除,因为我们自己的页面根本不需要它。注意是删除public、src文件夹下的所有文件,而不是删除这两个文件夹!

引入Ant-Design

当删除完成之后,我们就可以引入Ant-Design了,在集成终端中输入:yarn add antd

这样一来我们就在项目中引入了Ant-Design,但是我们还不能直接使用它,我们还需要做一些处理。

安装react-app-rewired,这是一个自定义配置react项目的工具:yarn add react-app-rewired --dev

修改根目录下的package.json:# /package.json"scripts": {

-    "start": "react-scripts start",

-    "build": "react-scripts build",

-    "test": "react-scripts test --env=jsdom",

+    "start": "react-app-rewired start",

+    "build": "react-app-rewired build",

+    "test": "react-app-rewired test --env=jsdom",

}

这样做的目的是让start、build、test三个命令使用我们自定义的React配置而不是使用默认的。

然后在项目根目录下创建一个config-overrides.js,用于书写自定义配置:# /config-overrides.jsmodule.exports = function override(config, env) {  return config;

};

接下来需要安装babel-plugin-import,这是一个按需加载代码、样式的babel插件:yarn add babel-plugin-import --dev

修改config-overrides.js:# /config-overrides.js+ const { injectBabelPlugin } = require('react-app-rewired');

module.exports = function override(config, env) {

+   config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }], config);    return config;

};

这样一来,Ant-Design就配置完了

添加路由

这时候在public下新建一个html文件,像这样:# /public/index.htmlhtml>

Electron Test

这个文件将来将会作为Electron的入口网页文件。

安装前端路由react-router-dom:yarn install react-router-dom

安装完成之后,在src目录下新建一个入口js文件index.js、一个路由组件文件router.js,再创建一个文件夹叫page用于存储页面组件文件,里面再建立一个文件叫做index.js,用于存储首页组件,这时项目结构如下:

项目结构

这时候我们先修改/src/page/index.js文件,在里面写一个首页的组件:# /src/page/index.jsimport React from 'react';

import { Button } from 'antd';

export class IndexPage extends React.Component {

render() {        return (

Click Me!

);

}

}

然后打开路由文件/src/router.js,写路由组件:# /src/router.jsimport React from 'react';

import { HashRouter, Route, Switch } from 'react-router-dom';

import { IndexPage } from "./page";

export class MainRouter extends React.Component {

render() {        return (

);

}

}

以后添加新页面只需要在page中写一个新的页面组件文件,然后修改路由文件,在Switch中添加path与组件的对应关系即可。

接下来再在/src/index.js这一入口文件中渲染路由组件:# /src/index.jsimport React from 'react';import ReactDom from 'react-dom';import { MainRouter } from "./router";

ReactDom.render(

,

document.getElementById('root')

);

这样一来,就算成功地写了一个框架了,以后添加新页面只需要按照规则添加即可。

可以尝试使用:yarn start

来运行调试服务器查看页面是否显示正常。如果看到这样的页面,上面有一个Antd样式的按钮:

页面

那么恭喜你,至少你到这一步之前的都成功了,如果没有成功,仔细回看步骤,看是否有做错的地方。

使用Electron运行页面

既然页面在不使用的Electron的时候能够正常运行,那么应该在Electron上面跑一跑看一下效果了。

在/package.json中添加一条脚本,并且修改少量配置,用于执行electron应用:# /package.json

"scripts": {    "start": "react-app-rewired start",    "build": "react-app-rewired build",    "test": "react-app-rewired test --env=jsdom",    "eject": "react-scripts eject",

+  "estart": "electron ."

}

...

+  "main": "main.js",

+  "homepage": ".",

+  "DEV": true

在项目根目录下创建一个main.js,用于作为electron应用的入口:# /main.jsconst { app, BrowserWindow } = require('electron');// 浏览器引用let window;// 创建浏览器窗口函数let createWindow = () => {    // 创建浏览器窗口

window = new BrowserWindow({

width: 800,

height: 600

});    // 加载应用中的index.html文件

window.loadFile('./build/index.html/');    // 当window被关闭时,除掉window的引用

window.on('closed', () => {

window = null;

});

};// 当app准备就绪时候开启窗口app.on('ready', createWindow);// 当全部窗口都被关闭之后推出app.on('window-all-closed', () => {    if (process.platform !== 'darwin') {

app.quit();

}

});// 在macos上,单击dock图标并且没有其他窗口打开的时候,重新创建一个窗口app.on('activate', () => {    if (window == null) {

createWindow();

}

});

从此,每次运行electron,只需要输入# 运行构建指令yarn build# 使用electron运行构建出来的Web项目yarn estart

即可看见效果,像这样:

Electron应用运行效果

像平时写Web项目一样写原生UI吧,Enjoy!

作者:Kindem

链接:https://www.jianshu.com/p/2057835c18e2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Electron是一个基于Chromium和Node.js的框架,可以帮助开发使用Web技术(HTML,CSS,JavaScript)来构建跨平台桌面应用程序。VueCli是一个基于Vue.js的命令行工具,可以帮助开发者快速构建Vue.js项目。使用Electron7+VueCli4开发跨平台桌面应用的过程如下: 1. 安装Node.js和npm 在安装Electron和VueCli之前,需要先安装Node.js和npm。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,npm是Node.js的包管理器。安装Node.js和npm可以让你在本地开发环境中运行和管理Electron和VueCli。 2. 安装Electron 在安装Electron之前,需要先创建一个空目录作为项目根目录,然后在命令行中切换到该目录下,执行以下命令: ``` npm init -y npm install electron --save-dev ``` 以上命令会创建一个package.json文件,并将Electron安装到本地项目中。 3. 创建Electron应用 在项目根目录下创建一个名为main.js的文件,这是Electron应用的主进程文件。在main.js中添加以下代码: ```javascript const { app, BrowserWindow } = require('electron') function createWindow () { // 创建浏览器窗口 const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) // 加载index.html文件 win.loadFile('index.html') } app.whenReady().then(() => { createWindow() }) ``` 以上代码创建了一个Electron窗口,并加载了一个名为index.html的文件。在项目根目录下创建一个名为index.html的文件,并添加以下代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> </body> </html> ``` 以上代码创建了一个包含“Hello World!”文本的HTML页面。 4. 安装VueCli 在命令行中执行以下命令安装VueCli: ``` npm install -g @vue/cli ``` 以上命令会全局安装VueCli。 5. 创建Vue.js应用 在项目根目录下执行以下命令创建一个Vue.js应用: ``` vue create renderer ``` 以上命令会创建一个名为renderer的子目录,并在其中初始化一个Vue.js项目。 6. 集成Vue.js应用 在main.js中添加以下代码将Vue.js应用集成到Electron应用中: ```javascript const { app, BrowserWindow } = require('electron') const path = require('path') function createWindow () { // 创建浏览器窗口 const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, preload: path.join(__dirname, 'preload.js') // 加载preload.js文件 } }) // 加载renderer/index.html文件 win.loadFile(path.join(__dirname, 'renderer', 'dist', 'index.html')) } app.whenReady().then(() => { createWindow() }) ``` 以上代码添加了一个preload.js文件,并将Vue.js应用的入口文件设置为renderer/dist/index.html。 7. 编译Vue.js应用 在renderer目录下执行以下命令编译Vue.js应用: ``` npm run build ``` 以上命令会生成一个名为dist的子目录,并在其中包含一个编译后的Vue.js应用。 8. 运行应用 在命令行中执行以下命令启动Electron应用: ``` npm start ``` 以上命令会启动Electron应用,并在Electron窗口中显示“Hello World!”文本和一个Vue.js应用。通过Electron7+VueCli4开发跨平台桌面应用,你可以使用Web技术来构建跨平台桌面应用程序,为用户提供更好的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值