Rui*_* Ma 4 typescript jestjs es6-module-loader
我正在尝试重新组织 TypeScript React 项目的导入/导出语句,使它们更短、更清晰,基本上是通过index.ts在每个功能特定文件夹中定义文件来导出该功能的资源(接口/类型/功能等)的方法。这种组织“进口”博客的更智能方式解释了几乎相同的想法。
但在更改后,笑话执行突然中断并出现以下堆栈跟踪。出于保密目的,所涉及的实体已被欺骗。
Test suite failed to run
TypeError: Cannot read property 'FooBarEnum' of undefined
at Object.FooBarEnum (src/features/Zoo/index.ts:93:23)
at Object.<anonymous> (src/features/CarPark/CarParkManager.ts:18:4)
at Object.<anonymous> (src/features/CarPark/index.ts:1:1)
at Object.<anonymous> (src/features/Zoo/ZooManager.ts:1:1)
at Object.<anonymous> (src/features/Zoo/index.ts:14:1)
at Object.<anonymous> (src/features/Rabbit/Rabbit.ts:4:1)
at Object.<anonymous> (test/features/Rabbit/Rabbit.test.ts:2:1)
Run Code Online (Sandbox Code Playgroud)
基本上,在常量文件中定义了一个根本无法读取的枚举。
我很确定我的笑话设置是正确的,因为它在此之前已成功执行。我用babel-jestand@babel/preset-typescript来编译。
如果有人能给我指出调试路径,我将不胜感激,因为堆栈跟踪并不能真正说明太多信息。
最后我意识到这是由我的代码库中隐藏的循环依赖引起的。
[TL;DR] 依赖循环:Rabbit>Zoo索引>CarPark索引>Zoo索引。
[详细] 情况是ZooManager从文件夹的索引文件导出Zoo,ZooManager导入CarParkManager是从CarPark文件夹的索引文件导出。'FooBarEnum'是从文件夹的索引文件中导出的,Zoo并被 所使用CarParkManager,构成了依赖循环。
我知道给定的欺骗性示例并不好读,但这提供了一个提示,即当您遇到类似问题时,请留意循环依赖关系。
可以添加import /no-cycle ESLint 规则来执行静态检查。
并且可以使用madge开发工具来构建可视化的模块依赖图。
参考:
| 归档时间: |
|
| 查看次数: |
6646 次 |
| 最近记录: |