1. 新建 vue 项目
注意:
- 必须使用 vue-cli 3.x 以上版本
- 不能使用histroy模式
- 不能懒加载
2. 引入依赖
yarn add -D electron electron-builder vue-cli-plugin-electron-builder
vue add electron-builder
3. 添加脚本
package.json :
"electron:serve": "vue-cli-service electron:serve",
"electron:build": "vue-cli-service electron:build"
4. 创建入口文件
在 src 目录下新建 background.js
import { app, protocol, BrowserWindow } from 'electron'
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
const isDevelopment = process.env.NODE_ENV !== 'production'
protocol.registerSchemesAsPrivileged([
{ scheme: 'app', privileges: { secure: true, standard: true } }
])
async function createWindow () {
const win = new BrowserWindow({//窗口默认大小和一些配置项
width: 800,
height: 600,
webPreferences: { //启用nodejs环境(electron升级到5.0之后默认关闭)
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
}
})
if (process.env.WEBPACK_DEV_SERVER_URL) {
await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
if (!process.env.IS_TEST) win.webContents.openDevTools()//是否打开控制台
} else {
createProtocol('app')
win.loadURL('app://./index.html')//打开某个链接或者文件
}
}
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()//杀死进程,也就是关闭窗口
}
})
app.on('activate', () => {//激活
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
app.on('ready', async () => {
if (isDevelopment && !process.env.IS_TEST) {
try {
await installExtension(VUEJS_DEVTOOLS)
} catch (e) {
console.error('Vue Devtools failed to install:', e.toString())
}
}
createWindow()
})
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
if (process.platform === 'win32') {
process.on('message', (data) => {
if (data === 'graceful-exit') {
app.quit()
}
})
} else {
process.on('SIGTERM', () => {
app.quit()
})
}
}
5. 引入入口文件
package.json :
"main": "background.js"
6. 运行项目
yarn electron:serve
7. 打包项目
yarn electron:build
8. 可能出现的问题及解决办法
查看 vue-cli 版本 vue -V 或者 vue --version
如果 vue-cli 版本是 3.x 以下,运行的时候会报错:
'vue-cli-service' 不是内部或外部命令,也不是可运行的程序或批处理文件...
installVueDevtools
installVueDevtools 是安装并显示 vue-devtools 的方法,已经分离出来了,需要换种方法引入
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
histroy
如果路由是 histroy 模式,打包之后,页面不能显示 里面的初始页面,而且刷新后显示空白。
改成 hash 就可以了。
跨域问题
方法1:后端解决
方法2:设置 webSecurity: false
const win = new BrowserWindow({//窗口默认大小和一些配置项
width: 800,
height: 700,
webPreferences: { //启用nodejs环境(electron升级到5.0之后默认关闭)
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
webSecurity: false
}
})
方法3:setProxy(尝试过,but没起作用)