作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去的几天里,这个问题一直让我失去理智。
这是我的目录结构:
[src]
|- cmds/
| |- Gh.js
| \- Help.js
|- commands.js
|...
commands.js
导出的类进入
Help.js
和
Gh.js
(以及我将来可能添加的任何其他文件)。但是,我不断收到错误消息:
class Gh extends _commands.Command {
^
TypeError: Class extends value undefined is not a constructor or null
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/
我是一名优秀的程序员,十分优秀!