使用打字稿对角度模块的循环依赖

问题描述 投票:0回答:1

我面临这个问题,我有 2 个相互依赖的 Angular 1.5 模块,这对于 AngularJS 来说很好,但是当我使用 TypeScript 和 Webpack 导入它们时,我得到了循环 TypeScript 模块依赖关系,并且模块未正确加载。 我在模块之间的角度服务中没有循环依赖关系,因此角度模块相互依赖应该没有问题。

//first.module.ts
import {SecondModule} from "second.module.ts";
let FirstModule = angular.module("firstModule",[SecondModule.name]);
export {FirstModule};

//second.module.ts
import {FirstModule} from "first.module.ts";
let SecondModule = angular.module("secondModule",[FirstModule.name]);
export {SecondModule};

在上面的示例中,我在最后一行得到“无法获取未定义的‘名称’”,因为 FirstModule 尚未导出。

我在网上看到的一个解决方案就是不将 SecondModule 定义为 FirstModule 的依赖项,而是使它们成为父模块(我的主应用程序模块)的依赖项,问题是我无法使用 ngMock 模拟 FirstModule 进行单元测试 - 因为它不会将 SecondModule 注册为依赖子模块。所以我必须模拟我的整个主应用程序,它又大又乱。

我看到的其他解决方案是用打字稿类包装角度模块,并将角度模块创建放在此类的构造函数中,这样我就可以控制何时创建模块,但随后我必须重构整个应用程序来创建这些包装模块的对象,我不知道这将如何影响使用 ngMock 编写单元测试。

对于这种情况有什么最佳实践吗?

谢谢!

angularjs typescript unit-testing angularjs-module angularjs-ngmock
1个回答
0
投票

您可以将字符串常量导出为文件中的第一件事

//first.module.ts
export const prefixFirstModule = "prefixFirstModule";
import {prefixSecondModule} from "second.module";
export const FirstModule = angular.module(prefixFirstModule,[prefixSecondModule]);

//second.module.ts
export const prefixSecondModule = "prefixSecondModule";
import {prefixFirstModule} from "first.module";
export const SecondModule = angular.module(prefixSecondModule,[prefixFirstModule]);

这有点痛苦,但据我所知,这是解决问题的唯一方法,并且与当前的模块结构对树摇动等提供相同的支持。

© www.soinside.com 2019 - 2024. All rights reserved.