Ecmascript 6 无法读取未定义的上的属性。电子浏览器窗口对象

Ecmascript 6 无法读取未定义的上的属性。电子浏览器窗口对象,ecmascript-6,electron,Ecmascript 6,Electron,我正试图学习电子,但在我使用的Pluralsight教程中遇到了一个问题。我安装了“电子预建”模块。每次运行“npm启动”时都会出现错误。窗口会按预期打开,但对话框中弹出的错误消息会破坏整个过程。以下是错误: 未捕获异常: TypeError:无法读取未定义的at对象的属性“on” 这条长长的错误消息还有更多内容,但它不允许我复制和粘贴,其余的错误只是指main.js代码第14行中假定问题的位置。这是我的main.js文件: const electron = require('electron'

我正试图学习电子,但在我使用的Pluralsight教程中遇到了一个问题。我安装了“电子预建”模块。每次运行“npm启动”时都会出现错误。窗口会按预期打开,但对话框中弹出的错误消息会破坏整个过程。以下是错误:

未捕获异常: TypeError:无法读取未定义的at对象的属性“on”

这条长长的错误消息还有更多内容,但它不允许我复制和粘贴,其余的错误只是指main.js代码第14行中假定问题的位置。这是我的main.js文件:

const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow

let mainWindow

app.on('ready', _ => {
  mainWindow = new BrowserWindow({
      height: 400,
      width: 400
  })
})

mainWindow.on('closed', _ => {
    console.log('closed')
    mainWindow = null
})
这表明我创建的BrowserWindow对象没有“on”方法,但根据Electron文档,我知道这是错误的:


所以我认为mainWindow的值没有被设置。我可以在声明时尝试使用新的BrowserWindow对象实例化mainWindow,但如果我尝试这样做,会收到一条错误消息,表明我只能在ready函数中实例化BrowserWindow对象。

您必须了解回调在node.js中是如何工作的,回调是异步执行的,在启动
app.onready
之前,
mainWindow
仍然未定义,因此
let mainWindow
的声明将
undefined
分配给
mainWindow
,将
mainWindow.on(“关闭”)和“…”
放入
app.on(“就绪”)
事件处理程序。这样做

const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow

let mainWindow

app.on('ready', _ => {
  mainWindow = new BrowserWindow({
      height: 400,
      width: 400
  })
  mainWindow.on('closed', _ => {
    console.log('closed')
    mainWindow = null
  })
})

如果您只是在electron脚本上调用
节点而不是
electron
,也会发生此错误。您的
npm start
脚本应该调用
npx-electron.
,因此请尝试先运行
npx-electron.
npx-electron main.js
。请参见此处的相关问题: