如何优雅的使用Electron开发跨平台桌面应用
一、背景
Electron 可以让你使用纯 JavaScript 调用丰富的原生(操作系统) APIs 来创造桌面应用。 你可以把它看作一个 Node. js 的变体,它专注于桌面应用而不是 Web 服务器端。
这不意味着 Electron 是某个图形用户界面(GUI)库的 JavaScript 版本。 相反,Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器
目前市面上的资料大都是electron+vue以强关联形式的组合编译,虽然可以共用一套package.json,但缺点是坑真的特别特别多,本人也是因为填坑无力,所以才有的这篇文章
二、思路
整体思路非常简单,也非常容易被接受,大致就分以下几个步骤(【】内命名皆随意):
- 创建空vue项目
- 配置【1】package.json
- 创建空electron项目(与【1】的关系可以是完全独立两个项目,也可以嵌套在【1】项目根路径下以独立文件夹形式存在,本文以第二种方式呈现)
- 配置【3】package.json
- 编译【1】,生成dist文件夹
- 将dist文件夹移动到【3】根路径下
- 进入【3】根目录,编译【3】
- electron-builder打包
三、项目结构
- 整体是vue项目中嵌套electron项目,图中【2】release文件夹包含的就是electron项目相关
- 标记【1】和【3】两个
dist
文件夹完全相同,【1】由vue项目打包生成,生成之后copy到【release】根路径下得到【3】 - 标记【4】是属于electron项目的package文件,作用也仅限于【release】路径下
- 标记【5】是属于vue项目的package文件,作用也仅限于vue相关
四、具体流程
4.1、创建vue项目
具体过程就不多赘述了,官网很详细
vue create [projectName]
4.2、创建Electron项目
在【4.1】根目录下创建【release】文件夹
在【release】文件夹下执行electron创建命令,详情可以参照electron开发文档
一个最基本的electron应用应该会有如下结构:
your-app/
├── package.json
├── main.js
└── index.html
具体的创建细节及描述请参考Electron文档-打造你的第一个Electron应用
4.3、配置vue项目config文件
配置该文件的目的是为了顺利打包vue项目,此处我是新建了vue.config.js文件用来处理此类配置,
针对本文的配置也挺简单,只是列出了几项,详情可参照配置参考
module.exports = {
// 部署生产环境和开发环境下的URL
publicPath: './',
// 生成的文件的总文件夹的名称
outputDir:'./release/dist',
// 指定生成的html文件的输出路径 (配置之后,改变系统默认的index.html的文件名)
indexPath:'./index.html',
// 针对map文件,map文件的作用:打包之后的项目,代码都经过了压缩加密
// 这时如果报错,无法准确得知错误在哪里产生,有了map文件,就可以精准定位到是哪里出错
// 如果打包后发现map文件体积过大,导致整个项目文件体积过大,就可以设置不输出map文件
productionSourceMap:false,
devServer: {
// can be overwritten by process.env.HOST
host: '0.0.0.0',
port: 8080
},
pluginOptions: {
electronBuilder: {
builderOptions:
{ win: { icon: './public/app.ico' },
mac: { icon: './public/app.png' }
}
}
}
};
4.4、编译vue项目
此步骤的目的在于生成dist文件夹,默认情况下会生成在vue项目根路径下,但通过对【4.3】的配置,此处将dist文件夹生成在./release/dist,以便Electron最终调用。
通过前文vue项目创建之后,会在package.json的scripts下生成build指令,可自行查看
以本文为例:
// 本文中的package.json
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
}
// 命令行执行打包指令
npm run build
4.5、配置Electron项目
Electron打包时需要icon等基本资源文件,本文是直接在【release】文件夹下创建了一个【build】文件夹,用于存储icon等资源文件
Electron配置文件:
截屏2020-03-25下午7.50.14.png上述图片展示的就是demo涉及到的一些配置信息,接下来就是最容易出错的一步了,如何让Electron项目与dist文件夹进行关联绑定,以便能正常显示vue打包内容:
4.6、配置main.js
配置Electron根项目下的main.js,也是Electron应用的启动函数
此处也是主要将与官网提供的不同之处做了标记,改动如下:
截屏2020-03-25下午8.07.50.pngOK,到这一步后就可以执行打包操作了,打包指令查看Electron项目的package文件
4.7、打包
执行打包操作后最终项目结构:
截屏2020-03-25下午7.57.03.png到此Electron+vue从0-1的打包过程就结束了,最终在平台上的运行效果:
截屏2020-03-25下午8.03.20.png 截屏2020-03-25下午8.03.36.png