1、首先全局安装安装包,也可以使用过程中单独安装
npm install -g electron
npm install -g electron-packager
2、vue项目配置vue.config.js,需要使用相对路径
3、vue项目确认路由文件,删除mode
4、在vue项目下新建electron目录,目录结构如下
5、electron目录结构如下
6、electron下的文件内容
main.js文件内容如下
const { app, BrowserWindow } = require("electron");
const path = require('path');
const fs = require("fs");
function reloadTheWin(win) {
fs.watch("./dist", event => {
if (event == "change") {
console.log('updating')
win.reload();
}
});
}
function createWindow() {
const win = new BrowserWindow({
width: 800,
height: 600,
icon: path.join(__dirname, './dist/favicon.ico'),
webPreferences: {
nodeIntegration: true,
preload: path.join(__dirname, 'preload.js')
}
});
const env = process.env.NODE_ENV
if( env== 'development'){
//开发环境 do something
console.info(env)
console.info('kaifa')
win.loadURL('http://localhost:8080/#/')
}else{
//生产环境 do something
console.info(env)
console.info('shengchan')
win.loadFile(__dirname + "/dist/index.html");
}
reloadTheWin(win);
}
app.whenReady().then(createWindow);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
package.json文件内容如下
{
"name": "electron-app",
"version": "1.0.0",
"description": "",
"main": "mian.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"serve": "set NODE_ENV=development&&electron . --mode=development",
"serve-prod": "set NODE_ENV=production&&electron . --mode=production",
"build": "electron-packager .",
"package-win-my": "electron-packager ./ AppName --overwrite --platform=win32 --asar --out=OutputFolderName --prune=true"
},
"electronPackagerConfig": {
"packageManager": "npm",
"icon": "/dist/favicon.ico"
},
"extraResources": [
{
"filter": [
"static/*"
]
}
],
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"electron": "^14.0.0"
}
}
preload.js文件内容如下
// preload.js
// All of the Node.js APIs are available in the preload process.
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const dependency of ['chrome', 'node', 'electron']) {
replaceText(`${dependency}-version`, process.versions[dependency])
}
})
7、开发过程中各个用到的小功能,细节操作
(1)在主进程配置后渲染进程可以使用node的API,使得浏览器的js可以支持node接口
(2)fs写文件
(3)把一个文件拖动到界面,获得文件的信息,进行加载
html写法
js的写法
(4)webview的使用,可以使用这个功能做爬虫
html
在主进程设置支持webview标签的配置
页面效果
监听webview的加载情况
在webview里面执行js,自动化的操作代码
(5)主进程和渲染进程的通信
--1主进程监听渲染进程发过来的事件,并进行答复
渲染进程主动发送消息给主进程
--2主动的发消息给渲染进程
渲染进程监听
解决乱码问题,配置UTF-8编码,先配置编码,再正常启动
(6)dialog窗口的配置
(7)用户关闭窗口之前给出用户提示
(8)原生自带网络请求的库
(9)electron-vue的环境搭建
(10)项目的基本结构和使用
打开浏览器
(11)使用ant ui框架,参考官网
(12)实现查找书籍功能
配置跨域问题,在主进程进行设置
(13)获取下载链接,需要使用后端的axios才能使用流的形式进行下载
使用后端的axios,进入node_modules,找到axios,将axios/lib/adapters的https.js的内容复制到xhr.js
(14)fs读取文件列表
(15)展epub的数据
九、electron + vue
npm install -g electron