Круговые зависимости от угловых модулей с использованием машинописи

Я сталкиваюсь с этой проблемой, когда у меня есть 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]);

Это немного болезненно, но, насколько я знаю, это единственный способ обойти проблему с той же поддержкой тряски деревьев и т. Д. С вашей текущей структурой модуля.

Другие вопросы по тегам