gpt4 book ai didi

javascript - 类型错误 : Class extends value undefined is not a constructor or null

转载 作者:行者123 更新时间:2023-12-04 17:30:39 25 4
gpt4 key购买 nike

在过去的几天里,这个问题一直让我失去理智。

这是我的目录结构:

[src]
|- cmds/
| |- Gh.js
| \- Help.js
|- commands.js
|...

我正在尝试导入由 commands.js 导出的类进入 Help.jsGh.js (以及我将来可能添加的任何其他文件)。但是,我不断收到错误消息:
class Gh extends _commands.Command {
^
TypeError: Class extends value undefined is not a constructor or null

所有文件都使用 Babel 进行编译, env设置为 "node": "current"并使用 wildcard包裹。我尝试将其设置为 "browser"看看这是否是它过于“高级”的问题,但我得到了一个关于 super 函数(或其他东西)的不同错误,我认为这是同一个问题。

这是从 commands.js 导出的类:

export class Command {
constructor (msg) {
this.id = msg.author.id
this.msg = msg
}
action () {}
get data () {
return readData().user[this.id]
}
updateUserData (key, val) {
updateUserData(this.id, key, val)
}
sendMsg (data) {
sendMsg(this.msg, data)
}
}

...这里是 cmds/Gh.js ,我尝试导入的文件之一 Command进入:

import {Command} from '../commands'

export class Gh extends Command {
constructor (msg) {
super(msg)
this.desc = 'Returns GitHub repository link and exits'
}
action () {
this.sendMsg('GitHub link: https://github.com/owm111/knife-wife')
}
}

我试着把 Command进入 cmds/ ,他们工作得很好。但是,当将其移回 commands.js 时,又破了。我尝试更改从 ../commands 导入的路径至 ./../commands , ../commands.js , ./../commands.js ;没有工作。我搬家 commands.js进入 cmds/ ,还是坏了。我试过 console.log(Command)在这两个 cmds/ ,但他们都返回了 undefined .

所有这一切使它看起来像是一个导入问题,但我无法弄清楚我的生活是什么。请帮忙。

最佳答案

如果其他人看到此错误,首先要查找的是 循环依赖 .将文件 A 导入 B,将 B 导入其他文件 C,依此类推。如果将 C 到 Z 中的任何一个导入到 A 中,那么 JS 将无法确保在另一个文件需要它时定义了一个文件(并且以后不会尝试返回并填写空白)。

这很可能是这种情况,因为显然没有发布其他代码,并且它仅在引入文件依赖项时出现。问题存在无论文件结构如何 : 唯一能保证避免它的结构是一个巨大的 JS 文件。解决方案是确保类之间关系的严格树结构,并使用工厂方法或替代通信(如发射器)来保持耦合松散。

如果您有多个 import/require 语句,我建议定期运行检查器,如 Madge在它们变得难以撤消之前找到并选择性地可视化任何循环。

npm install --save-dev madge
node_modules/madge/bin/cli.js --warning --circular --extensions js ./

关于javascript - 类型错误 : Class extends value undefined is not a constructor or null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com