electron-vue实践

  • Sorzen
  • 77 Minutes
  • January 30, 2018

前言

一直想做一个客户端应用,把electron实践一下,因为项目中有用到vue现成的组件库,所以在想可不可以将electron和vue一起使用,后来了解到electron-vue,也为之后的要走的路扫平了障碍。

electron-vue开发应用

electron-vue结合了vue-cli和electron,可以方便的使用vue进行electron应用的开发。

electron-vue项目的创建

1
2
3
4
5
6
7
8
# Install vue-cli
npm install -g vue-cli
vue init simulatedgreg/electron-vue my project

# install dependencies and run your app
cd my-project
yarn # or npm Install
yarn run dev # or npm run dev

项目工程目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
├── build                      // 构建相关  
├── dist // 配置相关
├── src // 源代码
│ ├── main // 进程相关设置
│ ├── index.js // Electron主进程设置
│ ├── index.dev.js // 进程设置
│ ├── assets // 图片 样式等静态资源
│ ├── models // 接口相关
│ ├── renderer // 业务组件相关
│ ├── assets // 组件相关静态文件(图片等)
│ ├── components // 页面级别以及全局组件
│ ├── router // 页面路由
│ ├── store // 数据相关设置
│ ├── views // 视图层
│ ├── App.vue // 入口页面
│ └── main.js // 入口 加载组件 初始化等
├── static // 第三方不打包资源
├── .babelrc // babel-loader 配置
├── eslintrc.js // eslint 配置项
├── .gitignore // git 忽略项
├── index.html // html模板
└── package.json // package.json

Electron设置

主进程

主进程通常是每一个Electron应用程序的入口。它控制着应用程序的生命,从打开到关闭。它还调用本地元素并创建应用程序中的每个渲染进程,其中内置完整的Node Api。
Main进程主要通过Node.js、Chromium和Native Apis来实现一些系统以及底层的操作,比如:创建系统级别的菜单、操作剪切板、创建APP的创建APP的窗口等。

主进程在src->main->index.js文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function createWindow () {
/**
* Initial window options
*/
mainWindow = new BrowserWindow({ // 设置窗口相关属性
height: 563,
useContentSize: true,
width: 1000,
center: true,
})

mainWindow.loadURL(winURL)

// 设置窗口关闭事件
mainWindow.on('closed', () => {
mainWindow = null
})
createMenu() // 菜单设置项
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 菜单选项设置
const createMenu = () => {
if (process.env.NODE_ENV !== 'development') {
const template = [{
label: 'Edit',
submenu: [
{ label: 'Cut', accelerator: 'CmdOrCtrl+X', selector: 'cut:' },
{ label: 'Copy', accelerator: 'CmdOrCtrl+C', selector: 'copy:' },
{ label: 'Paste', accelerator: 'CmdOrCtrl+V', selector: 'paste:' },
{ label: 'Select All', accelerator: 'CmdOrCtrl+A', selector: 'selectAll:' },
{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
click () {
app.quit()
}
}
]
}]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
}
}

具体请参考:Electron APIs列表

Renderer进程

Renderer进程主要通过Chromium来实现APP的图形界面,也就是前端开发部分,不过在Electron下可以使用一些Node模块(如FS)和一些在Main进程里能用的东西(如:Clipboard)

Renderer相关开发使用我们熟悉的Vue框架,因为Electron-vue已经帮我们将vue引入进来,我们只需在src->renderer下进行相关vue开发就可以,在设置好主进程后界面开发就像我们直接写页面一样简单。

打包

当页面开发和调试完毕,需要将页面打包成可执行程序(在项目生成时已经确定之后要打包生成的应用程序格式:windows格式还是Mac下执行模式),因此需要进行打包,应用的相关信息需要在packa.json中进行设置。

1
2
# 打包
npm run build

打包后在项目目录下生成build文件,build->win-unpacked文件夹即是打包生成的可执行文件,现在可以直接双击运行文件下的*.exe文件。

总结

electron开发难点其实在与main进程开发,需要我们及时查阅Electron APIs列表,而且需要对Node有一定了解,因此我们在开发时需要什么就查什么,难点自然就解决,对自己也是一个提升的过程。