电子应用程序不会启动,准备就绪时不存在

Posted

技术标签:

【中文标题】电子应用程序不会启动,准备就绪时不存在【英文标题】:Electron app won't start, whenready does not exist 【发布时间】:2020-07-18 15:46:57 【问题描述】:

我已经做了几天了,我已经从 Electron GitHub 克隆了电子快速启动(https://github.com/electron/electron-quick-start)我收到了这个错误,但它不仅仅是这个应用程序,而是全部应用程序。我不知道发生了什么。 电子最新版本:8.2.0 错误

app.whenReady().then(createWindow)
     ^

TypeError: Cannot read property 'whenReady' of undefined
    at Object.<anonymous> (/Users/user/Downloads/electron-quick-start-master/main.js:25:5)
    at Module._compile (internal/modules/cjs/loader.js:1147:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)
    at Module.load (internal/modules/cjs/loader.js:996:32)
    at Function.Module._load (internal/modules/cjs/loader.js:896:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47

代码:

const electron = require('electron')

// Modules to control application life and create native browser window
const app, BrowserWindow = require('electron')
const path = require('path')

function createWindow () 
  // Create the browser window.
  const mainWindow = new BrowserWindow(
    width: 800,
    height: 600,
    webPreferences: 
      preload: path.join(__dirname, 'preload.js')
    
  )

  // and load the index.html of the app.
  mainWindow.loadFile('index.html')

  // Open the DevTools.
  // mainWindow.webContents.openDevTools()


// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(createWindow)

// Quit when all windows are closed.
app.on('window-all-closed', function () 
  // On macOS it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') app.quit()
)

app.on('activate', function () 
  // On macOS it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (BrowserWindow.getAllWindows().length === 0) createWindow()
)

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

包JSON


  "name": "electron-quick-start",
  "version": "1.0.0",
  "description": "A minimal Electron application",
  "main": "main.js",
  "scripts": 
    "start": "electron ."
  ,
  "repository": "https://github.com/electron/electron-quick-start",
  "keywords": [
    "Electron",
    "quick",
    "start",
    "tutorial",
    "demo"
  ],
  "author": "GitHub",
  "license": "CC0-1.0",
  "devDependencies": 
    "electron": "^8.2.0"
  

【问题讨论】:

你应该尝试更新 Electron app.on('ready', createWindow); 尝试在当前版本中使用它。 electron 是最新版本(8.2.0) 【参考方案1】:

本身并不是一个答案——我刚刚在我目前正在从事的 Electron 项目中尝试过这个,它运行良好:

app.whenReady().then((choice) => 
    console.log("hey, I'm ready", choice);   
)

对于现实检查,我建议使用 ready 事件:

app.on('ready', function () 
  console.log("hey, I'm ready too!");   
);

虽然我不禁要问:你使用的是什么版本的Electron?如果您使用的是 pre-7 或 8 版本,他们还没有开始“承诺”的东西(我忘记了哪个版本开始使用 Promises

【讨论】:

试过了:TypeError: Cannot read property 'on' of undefined @Wexion - 这很奇怪。如果遇到这种情况,我会console.log(app) 以确保正在导入app。听起来不像。【参考方案2】:

您的电子版本低于 v3.0.0。

我们可以使用 3.0.0 版本中的whenReady()。 建议您更新您的电子版。

【讨论】:

虽然这是真的,但我不确定这是否是手头的错误。在 Electron 2 上,这种情况下您会收到 TypeError: app.whenReady is not a function 错误。对于用户来说,app 本身似乎是未定义的。 嗯,该应用程序在 v2 中可用。只是应用内没有声明 whenReady 函数。 无论如何,我想知道如果@Wexion 使用正确的快速启动存储库,他为什么会面临这样的错误。 实际上,这个 starter repo 使用的是 electron v8。而且看起来效果不错。 idk,是我的节点或电子安装搞砸了,我确实做了 npm i --save-dev electron【参考方案3】:

感谢大家帮助我,但我已经解决了这个问题: 我所要做的就是在前两行后面加上分号,

const app, BrowserWindow = require('electron');
const path = require('path');

不是这个

const app, BrowserWindow = require('electron')
const path = require('path')

【讨论】:

实际问题是因为您显示的 2 之后的代码行。您可能有一个立即调用的函数表达式。

以上是关于电子应用程序不会启动,准备就绪时不存在的主要内容,如果未能解决你的问题,请参考以下文章

设备就绪 ios 不工作

Helm 等待依赖项部署在 kubernetes 上准备就绪

Cordova watchPosition 不会重新启动手机上的 GPS 请求

在 node.js 中检查存储桶是不是准备就绪的最佳方法

Jquery DOM 准备就绪 - 不是每次都在 iphone 5 (ios7) 上的 Safari 中加载

iOS Deeplink 在启动应用程序时不起作用