Можно ли одновременно использовать 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?