Как реализовать архитектуру микро-интерфейса в устаревшем приложении с помощью Angular

Недавно наша команда решила внедрить архитектуру микро-интерфейса в наш унаследованный продукт. Он был разработан с использованием aspx-страниц Asp.Net вместе с javascript / jquery.

В прошлом году мы начали использовать angular в нашем приложении для некоторых представлений. Чтобы загрузить angular, мы помещаем файлы сборки prod в проект .net и загружаем компонент на главную страницу aspx.

Мы планируем перенести наши остальные ожидающие более старые представления на angular, используя архитектуру микро-интерфейса.

Так что я сделал небольшой пример того же и смог достичь архитектуры где-то близко к ней.

Я следил за этим URL-адресом для реализации и запускал его на порту 4400.

https://medium.com/swlh/build-micro-frontends-using-angular-elements-the-beginners-guide-75ffeae61b58

И в моем существующем проекте angular я загружаю его с помощью customElements

this.appendCustomElementWithUrls('app-positions','http://localhost:4400/main-es5.js', (<HTMLElement>document.getElementById("chartAppContainerNamInqA")) );

appendCustomElementWithUrls(name: string,url: string,target: HTMLElement){
        if (!customElements.get(name)) {
              const script = document.createElement('script');
              script.src = url;
              document.head.appendChild(script);
          }

          const component = document.createElement(name);
          target.appendChild(component);

    }

И это работает, как ожидалось, и я могу загрузить customElements в свой dev env. Но что касается производства, я действительно не знаю, как реализовать.

Моя забота:

  1. Придется ли мне запускать приложение на каком-то порту в продукте? Если да, то как это сделать, и может ли он быть динамическим, чтобы пользователь мог изменить порт. Как у нас в приложении .net. Поскольку у клиента может быть что-то уже запущенное на этом порту

  2. Правильный способ, которого я пытаюсь достичь, или нет.

Заранее спасибо.


person Amit    schedule 07.02.2020    source источник


Ответы (1)


Для тех, у кого могут быть такие требования.

Я провел много исследований, просмотрел множество статей и нашел решение.

Поэтому я создал отдельное приложение с использованием элементов Angular и сгенерировал единый пакет с помощью cmd;

ng build --prod --output-hashing none --single-bundle true

затем я создал приложение в IIS и поместил в него все файлы, сгенерированные prod, на порт 9091. Вы можете использовать для этого любой порт.

В моем файле web.config я создал такой ключ, что если пользователь изменяет номер порта, он напрямую обновляет web.config:

<add key="MicroFrontEnd" value="http://localhost:9190"/>

Поскольку порт должен быть настраиваемым, я создал api для получения номера порта.

Затем я использовал это в своем приложении оболочки, и он работает как шарм.

person Amit    schedule 28.02.2020
comment
У вас есть образец того, как вы интегрировали angular в страницы aspx. - person John Kuriakose; 30.09.2020
comment
Привет, Джон. На одной из моих страниц aspx, которая служит корнем, я добавил div ‹div id = mfContainer› ‹/div› Мое приложение оболочки ищет этот элемент и загружает приложение. - person Amit; 30.09.2020