今天启动一个已有的项目的时候报错app.makeSingleInstance is not a function,原因是那个项目是别人以前写的,在那个electron2.0时代,确实是用app.makeSingleInstance来实现单实例的。
但是现在已经是electron4.0时代了,已经不存在这个方法了(一般来说应该做到向下兼容的,但是这个方法真的没有了),现在是使用app.requestSingleInstanceLock()方法来实现单实例的:
const { app } = require('electron')
let myWindow = null
const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', (event, commandLine, workingDirectory) => {
// 当运行第二个实例时,将会聚焦到myWindow这个窗口
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})
// 创建 myWindow, 加载应用的其余部分, etc...
app.on('ready', () => {
})
}
把app.makeSingleInstance换成app.requestSingleInstanceLock()来实现后,ok可以启动了
参考:https://newsn.net/say/electron-single-instance-lock.html
后续:
启动后就页面最上方有东西,啥功能也没有,那么就调试看看吧,在main.js里加入调试部分:(记得安装依赖,不装它也会提示你装的)
// Install `electron-debug` with `devtron`
require('electron-debug')({ showDevTools: true })
// Install `vue-devtools`
require('electron').app.on('ready', () => {
let installExtension = require('electron-devtools-installer')
installExtension.default(installExtension.VUEJS_DEVTOOLS)
.then(() => {})
.catch(err => {
console.log('Unable to install `vue-devtools`: \n', err)
})
})
跑起来后果然能看到控制台报错了:
去网上搜,发现有人提出这个issue了:https://github.com/atom/node-keytar/issues/64
照着改吧:
先安装了npm install --save-dev electron-rebuild,运行之后发现还是报那个错,然后又运行了这条命令./node_modules/.bin/electron-rebuild,果然没有一帆风顺的事情,在你通往成功的路上总会埋伏几个甚至几堆错误
又上网搜索答案吧,又看到了一个issue:https://github.com/electron/electron-rebuild/issues/35
就是装依赖呗: npm install --save-dev electron-prebuilt 之后再运行命令./node_modules/.bin/electron-rebuild
好了,终于没出幺蛾子了,那就启动项目看看吧
WTF??? 我好想哭啊啊啊啊,到底是什么鬼这么捉弄我,我换回app.makeSingleInstance还不行吗,换回之后在启动:
OK,能启起来了,但是还有一个报错:
没找到解决方法。。。。先暂停