A 文件定义 Bullet 获取了 C文件 Res 配置
B 文件定义 EnemyBullet 继承了 Bullet
C 文件定义 Res 资源配置获取了 EnemyBullet
导致 TypeError: Class extends value undefined is not a constructor or null
A 文件定义 Bullet 获取了 C文件 Res 配置
B 文件定义 EnemyBullet 继承了 Bullet
C 文件定义 Res 资源配置获取了 EnemyBullet
导致 TypeError: Class extends value undefined is not a constructor or null
export class Bullet {
die() {
console.log(EnemyBullet)
}
}
export class EnemyBullet extends Bullet {
}
代码如上,随时可以复刻出来
怎么@官方出来
循环引用了,JS 不支持循环引用。由于看不到完整代码,我估计把 A 里面的 import { Res } from xxx 改成 import type { Res } from xxx 即可
是的,我知道是循环引用了,但是可以从编译层面解决它 circular-dependency-plugin
在前端项目下,utils config 循环引用是很常见的
// Res.ts 文件
import EnemyBullet from '@/Bullet/EnemyBullet'
export enum PrefabPaths {
EnemyBullet = 'Prefab/EnemyBullet',
}
export const PrefabMap = {
EnemyBullet: {
p: PrefabPaths.EnemyBullet,
c: EnemyBullet
},
}
// Bullet.ts 文件
import { PrefabMap } from '@/Config/Res'
export default class Bullet extends Component {
die() {
console.log(PrefabMap.EnemyBullet)
}
}
// EnemyBullet.ts 文件
import Bullet from './Bullet'
export default class EnemyBullet extends Bullet {
}
请问如何编译层面解决?circular-dependency-plugin 似乎只是一个检测工具,检测功能我们现在已经有了,你应该能找到循环引用相关报错。
那还是无法从编译层面解决你遇到的这个问题。需要你自己调整一下项目结构。
哎,我已经调整了,使用订阅了