Загрузка модулей с другого сервера во время выполнения

Можно ли каким-то образом загружать разные модули во время выполнения моего приложения angular 2 с разных серверов, и если да, то как я могу этого добиться?

Я хотел бы, чтобы мое приложение загружало различные компоненты из общего приложения с изолированных серверов (A, B, C), чтобы их можно было отключать и обновлять независимо от основного приложения и любых компонентов, которые включены в A, B или C. не будет загружен. 3 модуля, показанные внизу, будут иметь компоненты, но основное приложение будет объявлять в своем HTML, где оно должно загружать компонент.

Обзор

ОБНОВЛЕНИЕ

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


person Myth1c    schedule 22.03.2017    source источник
comment
Вы можете попробовать динамически загружать модули ES6 с помощью SystemJS или Webpack require.ensure. A2 обрабатывает это с помощью ленивых загруженных маршрутов, и никак иначе. «не то, что я ищу» предполагает, что вы не разработали приложение должным образом для обработки этой ситуации с маршрутизатором. Без веских причин это больше похоже на проблему XY, чем на что-то еще.   -  person Estus Flask    schedule 22.03.2017
comment
@estus, не могли бы вы немного рассказать о том, как это может работать с использованием этой функции веб-пакета? В angular 1 я мог бы решить эту проблему, найдя модуль из основного приложения в сценариях A, B, C и объявив таким образом контроллеры, директивы и службы.   -  person Myth1c    schedule 23.03.2017
comment
import, вероятно, будет лучше. Promise.all([import('modA').catch(noop), import('modB').catch(noop)]).then(([modA, modB]) => ....@NgModule(...import: [modA, modB])...) class MainMod{}. Опять же, это похоже на проблему дизайна, и у вас, вероятно, будет много проблем с этим подходом, даже если это возможно. Правильный способ сделать это — компонентный маршрутизатор и ленивые маршруты.   -  person Estus Flask    schedule 23.03.2017
comment
ты решил проблему? @Клэйес   -  person Dani Andújar    schedule 08.11.2017
comment
@user3757628 user3757628 Это был не мой вопрос, я был последним, кто редактировал вопрос, и все, что я сделал, это удалил тег, который не относился к вопросу. Я не был вовлечен в проблему или в предложение каких-либо решений.   -  person Claies    schedule 08.11.2017
comment
ты решил проблему? @Myth1c   -  person Dani Andújar    schedule 15.11.2017


Ответы (1)


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

В этой статье рассказывается, как загрузить модуль веб-пакета из другого источника: Решение: динамически загружать независимо скомпилированные пакеты Webpack 2

В маршрутах вы определяете обратный вызов в разделе loadchildren:

const appRoutes: Routes = [
    {path: '', component: MainComponent},
    {path: 'modulea', loadchildren: loadModuleA}
]

метод loadModuleA будет выглядеть так:

export function loadModuleA() {

    return new Promise((resolve, reject) => {

        // the method from the article
        loadPlugin('path/to/server/of/moduleA', (exports) => {
            // The Submodule must export ModuleA
            resolve(exports.ModuleA);
        });

    });

}
person Franziskus Karsunke    schedule 26.06.2017
comment
я не мог заставить это работать... говорит, что не могу прочитать опору loadchildren of undefined - person nate; 15.05.2018