Круговые зависимости от угловых модулей с использованием машинописи
Я сталкиваюсь с этой проблемой, когда у меня есть 2 угловых модуля 1.5, которые зависят друг от друга, что хорошо для angularjs, но когда я импортирую их, используя typcript & webpack, я получаю циклические зависимости от машинописного модуля, и модули не загружаются должным образом. У меня нет круговых зависимостей в угловых сервисах между модулями, поэтому не должно быть проблем в зависимости угловых модулей друг от друга.
//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, а сделать их обеими зависимостями родительского модуля (моего основного модуля приложения), проблема в том, что я не могу смоделировать FirstModule, используя ngMock для модульного тестирования - так как он не регистрирует SecondModule как зависимый субмодуль. поэтому я должен издеваться над всем моим основным приложением, которое является большим и грязным.
Другое решение, которое я видел, заключалось в том, чтобы обернуть угловые модули классами машинописного текста и поместить создание углового модуля в конструктор этого класса, чтобы я мог контролировать, когда создается модуль, но затем мне нужно провести рефакторинг всего приложения для создания объектов. из этих упакованных модулей, и я понятия не имею, как это повлияет на написание модульных тестов с использованием ngMock.
Есть ли лучшие практики для этой ситуации?
Спасибо!
1 ответ
Вы можете экспортировать строковую константу в качестве первой вещи в файле
//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]);
Это немного болезненно, но, насколько я знаю, это единственный способ обойти проблему с той же поддержкой тряски деревьев и т. Д. С вашей текущей структурой модуля.