使用tsup打包ECS私有npm包出现类实例重复问题求助
tsup打包ECS私有npm包时出现类实例重复导致通信异常的问题
我正在开发一个基于ECS架构的私有npm包,使用tsup进行代码打包。
当前配置与代码结构
- tsup打包配置:配置了多格式导出(CJS/ESM)、代码分割、生成SourceMap和类型声明,核心示例如下:
import { defineConfig } from 'tsup'; export default defineConfig({ entry: ['src/index.ts'], format: ['cjs', 'esm'], splitting: true, sourcemap: true, clean: true, dts: true, });
- 入口导出(index.ts):通过
export *批量导出各模块内容,示例:
export * from './components'; export * from './systems'; export * from './ecsDefs';
- ECS World定义(ecsDefs.ts):在该文件中声明纳入World的组件、系统数组,并创建导出World实例,示例:
import { createWorld } from 'ecs-lib'; import { CompA, CompB } from './components'; import { SysA, SysB } from './systems'; const components = [CompA, CompB]; const systems = [SysA, SysB]; export const world = createWorld({ components, systems });
遇到的问题
打包后dist文件夹中出现同一类的两个独立实例:一个是通过index.ts直接导出的模块实例,另一个是ecsDefs.ts中World内部引用的实例。这直接导致非ECS静态类与ECS类之间的通信完全失效。
已尝试的解决方法
- 在包外独立创建ECS系统时,导入并更新外部静态属性一切正常;但将系统移入包内后,包外代码能识别静态属性的修改,可系统自身却无法读取到这些修改,推测是类实例重复导致的。
- 尝试将静态类挂载到
window对象并声明全局变量,但这种方式不稳定,不适合生产环境。
想问问有没有人遇到过相同的问题?你们试过哪些有效的解决方法?如果需要更多细节我可以补充。
内容的提问来源于stack exchange,提问作者J e r 0
相关产品推荐
相关产品推荐

