Начальная загрузка угловых 6 модулей условно

Мой вариант использования выглядит следующим образом:

У меня есть два модуля: A и B. A заботится обо всех взаимодействиях на стороне клиента, а B заботится об обновлении токена из службы единого входа и делает это в фоновом режиме с помощью iFrame. На основе текущего URL-адреса мне нужно условно загрузить модуль A или B. Это будет означать, что только один из двух модулей будет доступен в приложении в любой момент времени. Я делаю это, потому что у меня будет iFrame в корневом компоненте A, который будет загружать модуль B и, таким образом, B продолжает работать в фоновом режиме внутри iFrame.

Мой файл main.ts выглядит так.

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { A } from './app/app.module';
import { B } from './app/modules/b/b.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}
if (!location.href.includes('b2b/auth')) {
  platformBrowserDynamic().bootstrapModule(A)
    .catch(err => console.log(err));
} else {
  platformBrowserDynamic().bootstrapModule(B)
  .catch(err => console.log(err));
}

Проблема в том, что приведенный выше код отлично работает в dev только с ng build, но как только я создаю prod, используя ng build --prod, он успешно компилируется, но при запуске выдает:

uncaught error in function() {} No NgModule metadata found for 'function (){}'. и на этом выполнение останавливается. Я также получаю:

WARNING in Lazy routes discovery is not enabled. Because there is neither an entryModule nor a statically analyzable bootstrap code in the main file. как для разработки, так и для производства.

Я вижу, что у многих людей есть эта проблема, и мне было интересно, смог ли кто-нибудь решить эту проблему.

ng build выдает ошибку: "Пытался найти загрузочный код, но не смог.”

Поддержка нескольких входных модулей

https://github.com/angular/angular-cli/issues/4624

ошибка: не найдены метаданные NgModule для 'function(){}'. Волшебная оптимизация для aot

Не найдены метаданные NgModule для 'function(){}'

но не повезло ни с одним из предложений. Я знаю, что упростил формулировку своей проблемы, но я сделал это только для того, чтобы иметь четкое представление о том, каков мой вариант использования и проблема, с которой я сталкиваюсь.

Любая помощь приветствуется. Спасибо


person Krishna    schedule 28.06.2019    source источник
comment
Я не вижу смысла в вашем вопросе: вам не нужны оба модуля, чтобы ваше приложение работало? Вы должны автоматически обновлять токен, пока пользователь просматривает ваше приложение. Если вы сделаете то, что пытаетесь сделать, пользователю придется перезагрузить страницу, чтобы получить доступ к вашему приложению после подключения?   -  person    schedule 28.06.2019
comment
@Maryannah, одно и то же приложение развернуто в разных местах. Допустим, х, у, z. x не требует модуля B, как и y. Z требует, чтобы модуль B присутствовал в iframe для обновления токена.   -  person Krishna    schedule 28.06.2019
comment
Тогда вам не нужно делать его динамическим, а нужно строить с разными средами для каждого X, Y и Z. Если вы этого не сделаете, X и Y будут нести модуль B (что означает использование сети, использование памяти .. .), и он не будет использоваться (поэтому для них мертвый кусок кода)   -  person    schedule 28.06.2019
comment
@Maryannah На данный момент в проекте мой клиент не возражает против загрузки дополнительных 10-12 КБ сжатого модуля вместо двух разных приложений, работающих на разных портах. Так что, я думаю, это единственное решение.   -  person Krishna    schedule 28.06.2019
comment
Привет, Кришна, ты нашел решение для этого? какой подход вы выбрали?   -  person kaleshanagineni    schedule 11.11.2020