编译bug,请官方赶紧解决

A 文件定义 Bullet 获取了 C文件 Res 配置

B 文件定义 EnemyBullet 继承了 Bullet

C 文件定义 Res 资源配置获取了 EnemyBullet

导致 TypeError: Class extends value undefined is not a constructor or null

1赞
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 似乎只是一个检测工具,检测功能我们现在已经有了,你应该能找到循环引用相关报错。

https://www.ruanyifeng.com/blog/2015/11/circular-dependency.html

那还是无法从编译层面解决你遇到的这个问题。需要你自己调整一下项目结构。

哎,我已经调整了,使用订阅了