Electron app.on('ready'...从未被调用,电子窗口从未显示。似乎绑定到特定的 Git 存储库



摘要

我是Electron开发的新手,并帮助领导一个创建电子应用程序的小项目。在 Git 存储库中工作了一天左右后,电子窗口突然停止出现。我已经确定我在app.on('ready' callback)中给出的函数回调永远不会被调用。

我的工作站设置: NodeJS版本:12.9.0(也用10.16.3测试( 纱线版本:1.17.3 操作系统:视窗 10 企业版

最初,我松散地遵循 Ryan Brockhoff 的 Medium 帖子,关于在电子开始出现故障时使用 Electron 和 React,但后来我削减了一个全新的 Git 分支,只建立了一个极小的 Electron 项目,同样的问题出现了。

电子在整个系统范围内不会以相同的方式发生故障。我能够完美地运行电子 API 演示。此外,我正在试验电子的较旧的测试目录仍然起作用。

当我尝试运行损坏的电子存储库时,任务管理器确实在命令行进程下将三个电子进程显示为子进程。当我运行一个功能良好的电子过程时,电子过程显示为父过程

我确认永远不会通过在函数内放置console.log语句以及分配回调时的 print 语句来调用"ready"回调函数。 正在访问回调赋值 print 语句,我可以在控制台上看到输出,但从未到达回调函数内的 print 语句, 并且该输出永远不会打印到控制台。

故障 排除

此时我已经完成了许多故障排除步骤:

故障排除:我删除并重新克隆了计算机上其他位置的 Git 存储库 结果:问题仍然存在

故障排除:让程序运行一段时间,也许它需要在准备好之前设置一些东西 结果:10+ 分钟后,没有变化

故障排除:我下载了 electron-api-demos 存储库,以查看 electron 是否在该项目中工作 结果:电子 API 演示按预期完美运行

故障排除:我将电子版本从"^6.0.3"降级为"^6.0.1",它适用于我计算机上的不同项目 结果:问题仍然存在

故障排除:我创建了一个新的空 Git 分支,没有代码,并尝试在我看到问题的同一 git 存储库中创建一个新的最小电子项目 结果:问题再次出现

故障排除:完全重新安装 Node JS,将版本从 12.x 最新版本更改为 10.x LTS 结果:无变化

故障排除:克隆并尝试在 Ubuntu 虚拟机中运行项目 结果:成功,项目按预期工作

疑难解答:要求同事在其 Windows 10 计算机上安装项目 结果:成功,同事无法重现我的问题

法典

我设置了一个极小的项目来重现这个问题。以下是我目前的项目:

包.json

{
...
"main": "main.js",
"scripts": {
"electron-start": "electron ."
},
"devDependencies": {
"electron": "^6.0.3"
},
...
}

主.js

const {app, BrowserWindow} = require('electron')      
function createWindow () {
console.log("inside the on ready callback"); //for troubleshooting
win = new BrowserWindow({width: 800, height: 600})  
win.loadFile('index.html')   
}      
console.log("outside the function"); //for troubleshooting
app.on('ready', createWindow)

索引.html

<!DOCTYPE html>
<html lang="en">
<body>
<h1>Hello World!</h1>
</body>
</html>

当我运行yarn electron-start时,以下内容将打印到我的控制台:

yarn run v1.17.3
$ electron .
outside the function

永远不会到达 on ready 回调内部的打印语句。未发出任何错误。

结论

在这一点上,我怀疑我的计算机上有一些东西搞砸了。运行此代码的 Git 存储库似乎也导致了问题。我已经做了很多谷歌搜索,我找不到其他人面对这个问题。从这里我唯一能想到的就是尝试废弃我们的整个 git 存储库并创建一个新的存储库(这也许可能,也可能不可能(,并将我的计算机带到技术支持中以进行可能的替换。任何关于如何前进的线索将不胜感激。谢谢

好吧,所以我最终找到了解决这个问题的方法。此错误是由于尝试使用电子开发工具安装程序安装额外的开发工具引起的。我发现错误是由%AppData%/electron目录和%AppData%/[projectname]目录中遗留的数据引起的。删除这两个目录可以解决此问题。

解决办法:在app.on('ready', createWindow)之前调用app.removeAllListeners('ready')

最新更新