Webpack и SystemJsNgModuleLoader одновременно Angular 5 - PullRequest
0 голосов
/ 01 мая 2018

Можно ли одновременно использовать webpack и SystemJsNgModuleLoader в веб-приложении Angular 5?

Я хочу упаковать свое основное приложение (чтобы мне нужно было обслуживать только один файл), а затем динамически загружать новые модули (например, DynModule, определенные в dyn.ts/js) через SystemJsNgModuleLoader. Как только я упаковываю свое приложение и пытаюсь динамически загрузить NgModule, он говорит мне, что не может найти модуль "./dyn".

Обновление: перед упаковкой мое приложение выполняет веб-запрос и загружает ./dyn.js. После комплектации он не выполняет никаких веб-запросов. Я предполагаю, что Webpack изменяет поведение моего SystemJsNgModuleLoader. Как я могу обойти это?

Следующий код работает, если он не упакован:

app.component.ts

@Component({
    selector: 'my-app',
    template: `<button (click)="load()">load</button>`,
})
export class AppComponent {
    constructor(private loader: SystemJsNgModuleLoader) {
    }

    load() {
        new Promise((resolve, reject) => {
            this.loader.load("./dyn")
                .then();
        });
    }
}

После упаковки моего приложения со следующей конфигурацией я получаю следующую ошибку:

webpack.config.js

module.exports = {
    output: {
        filename: "./out.js"
    },
    entry: "./src/main.js",
}

Примечание: dyn.ts/js не будет включено в мой упакованный out.js, так как я загружаю его динамически.

out.js:51 ERROR Error: Uncaught (in promise): Error: Cannot find module "./dyn".

Error: Cannot find module "./dyn".
at eval (out.js:790)
at ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (out.js:138)
at ZoneDelegate.invoke (zone.js:387)
at Zone.run (zone.js:138)
at zone.js:872
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (out.js:138)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at eval (out.js:790)
at ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (out.js:138)
at ZoneDelegate.invoke (zone.js:387)
at Zone.run (zone.js:138)
at zone.js:872
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (out.js:138)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at zone.js:873
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (out.js:138)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
at ZoneTask.invokeTask [as invoke] (zone.js:500)
at invokeTask (zone.js:1540)

Предполагается, что я могу использовать webpack и SystemJsNgModuleLoader:

  • Что произойдет, если мой DynModule импортирует что-то, что уже импортировано моим AppComponent?
  • И что произойдет, если мой DynModule импортирует что-то, что еще не импортировано моим AppComponent? Что собираются делать SystemJ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...