简介
- 官网、w3cschool文档
Electron
- 使用 JavaScript,HTML 和 CSS 构建跨平台(Mac、Windows 和 Linux)的桌面应用程序
- Electron 结合了 Chromium、Node.js 和用于调用操作系统本地功能的 API(如打开文件窗口、通知、图标等)
- 案例:VS Code、Slack、Facebook Messenger等
- 相关文章
简单使用
1 | # 运行官方示例 |
与VUE项目结合
- 将VUE项目集成Electron有两种方式
- 在自己的 vue 的项目中引入插件,然后打包(本文案例)
- 将自己的 vue 项目打包,放到官方的 demo 文件中,改变打包路径
- 通过
simulatedgreg/electron-vue
等插件创建vue项目,则包含了Electron
- 大部分组件通过npm设置为淘宝镜像即可加速,但是像electron-mirror、node-sass等组件需要额外设置镜像地址配置到
~/.npmrc
才能成功下载。可使用mirror-config-china插件将常用组件的镜像地址全部加入到了上述文件夹。electron项目用cnpm可能会出现一些奇怪的现象
基于electron-builder打包(推荐)
- electron-builder文档
- electron-builder打包时会下载的一些依赖,下载保存的目录为
- macOS:
~/Library/Caches/electron-builder
- Linux:
~/.cache/electron-builder
- windows:
%LOCALAPPDATA%\electron-builder\cache
依赖包存放路径如- nsis
- nsis-3.0.3.2
- nsis-resources-3.3.0
- winCodeSign
- winCodeSign-2.4.0
- nsis
- macOS:
参数说明
1 | electron-builder |
使用案例
1 | # 参考:https://github.com/QDMarkMan/CodeBlog/tree/master/Electron |
- package.json配置文件
1 | { |
electron-build.js 打包文件
1 | var exec = require('child_process').exec; |
vue项目文件目录结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26dist # vue打包的目标目录
index.html
package.json
index.js # 可`electron dist/index.js`运行electron应用
preload.js
demo-win32-x64 # 打包生成文件目录
locales
resources # 资源文件目录
# 如果是electron-builder打包,app目录被打包成了 app.asar,可通过asar命令解压查看
app # 项目打包后文件目录。会把上文命令`electron-packager ./dist/ --arch=x64 --overwrite`中的./dist/目录下文件全部复制到app目录
main.js
index.html
package.json
index.js
preload.js
demo.exe # 可执行文件
node_modules
public # vue打包模板文件夹,最终会打包到dist目录
index.html
package.json
index.js
preload.js
src
main.js
package.json
vue.config.js启动过程说明
- 点击可执行文件 ShengQi.exe
- 从 resources/app/package.json 文件中获取入口文件
- 如 package.json 定义属性:
"main": "my_dir/my_index.js"
,那么入口文件则是此处指定的,如果没有指定main属性,则入口文件为package.json同目录下的index.js文件 - 无package.json文件,则点击 ShengQi.exe 无任何反应
- 而index.js中通过
mainWindow.loadURL('file://' + __dirname + '/index.html')
引入vue打包生成的index.html文件(原public/index.html文件),从而启动了vue应用
常见问题
- 报错:
Unresolved node modules: vue
。解决:此问题为cnpm安装依赖导致,需要使用npm安装,然后配合mirror-config-china进行安装 ^1 - centos上打包说明
- 需要安装 Wine,部分场景需要安装 Mono等
- 获取通过提供的Docker镜像进行编译
自动更新
- 更新方式
- 替换html文件更新,这个比较节约资源,但是并不适用于builder打包出来的程序
- 替换asar文件,这个比较小众
- electron-builder + electron-updater 实现全量更新(推荐) ^2
- 基于autoUpdater,借助 Squirrel 实现自动升级
electron-updater 实现全量更新
- 安装
npm i electron-updater -S
- 安装
npm i config -S
主要用于读取客户端配置文件,用于获取不同环境的更新链接。解决打包后区分测试和生产环境,预置配置到用户端 ^4 - 使用 electron-updater 更新,只需要每次把打包好的文件(latest.yml和xxx.exe)复制到更新目录即可。注意每次打包需要升级版本号
- package.json增加publish配置
1 | { |
- 创建
public/config
文件夹,并创建default.json
(如下)、default.prod.json
1 | { |
- 创建update.js
update.js文件
1 | const autoUpdater = require('electron-updater').autoUpdater |
- 修改 public/index.js 项目入口文件,部分代码如下
1 | // 修改config查看的配置文件目录 |
- 渲染进程显示更新进度
electron-update.vue文件
1 | <!-- electron-update.vue,将其引入到 Main.vue中 --> |
基于 electron-packager 插件打包(不推荐)
1 | npm install electron-packager -S # 这个是打成exe文件的插件。如果是node v8.x可使用版本v14.2.1,而v15.x需要node v10.x。还可使用electron-builder进行打包 |
常见问题
- 通过访问链接下载Excel,不能自动打开。可考虑调用命令打开文件
1 | // public/index.js |
electron-vue
常用插件
electron-log日志插件
npm install electron-log -S
安装 ^3- 使用
1 | import log from 'electron-log'; |
- 日志文件位置,参考:https://www.npmjs.com/package/electron-log
- on Windows:
%USERPROFILE%\AppData\Roaming\{app name}\logs\{process type}.log
- on Windows:
electron-store本地存储文件
- window.localStorage 仅在浏览器进程(渲染进程)中起作用,错误退出可能丢数据 ^5
- vuex存储在内存,localstorage则以文件的方式存储在本地,electron-store数据存储卸载应用之后依然存在
- 应用场景:vuex用于组件之间的传值,localstorage则主要用于不同页面之间的传值
- 永久性:当刷新页面时vuex存储的值会丢失,localstorage不会
常见问题
- TypeError: fs.existsSync is not a function | import { ipcRenderer } from ‘electron’
参考文章