Angular CLI проект с настройкой маршрута Lazy Loading в библиотеке - PullRequest
0 голосов
/ 24 мая 2018

У меня есть рабочее пространство Angular 6 CLI, содержащее библиотеку с функциональными модулями.Каждый функциональный модуль содержит свои собственные маршруты, но я хочу, чтобы модуль маршрутизации библиотеки был родительским, поэтому путь должен фактически соответствовать макету: libraryA / featureA.

Решение, по-видимому, заключается в отложенной загрузке модуля библиотеки,но я не могу заставить его работать.Я начал с простой настройки, я создал новое приложение Angular с ng new, затем я скачал Образец маршрутизатора и скопировал весь файл из router/src/app в мою папку src/app.Выполнение ng build выявило первую ошибку:

ERROR in Could not resolve module app/admin/admin.module relative to /E/git/my-app/src/app/app-routing.module.ts

Итак, я начал сравнивать пример маршрутизатора с моим проектом и нашел различия в файлах tsconfig * .ts.Наборы образцов маршрутизатора baseUrl в src/tsconfig.app.json и src/tsconfig.spec.json, где Angular CLI устанавливает его непосредственно в tsconfig.ts.Поэтому я изменил его, чтобы он соответствовал образцу маршрутизатора, и он работал.

Но как заставить это работать, например, если crisis-center является библиотекой (ng generate library crisis-center) и не лежит в пределах src/app?

Как настроить baseUrl?Как выглядит loadChildren (например, loadChildren: 'crisis-center/crisis-center.module#CrisisCenterModule')?Дело в том, что независимо от того, что я пытаюсь сделать, я застрял с сообщением об ошибке выше: Could not resolve module relative to ....

Я только что добавил проблемные части в свой публичный репозиторий на GitHub:

https://github.com/AndreasFagschlunger/o2xfs-angular/commit/8b0f8735d799943088e61a5c546e3c27d89f09b3

Так что вы можете git checkout и попробовать сами, ng build operator работает, но ng build не работает независимо от того, что я установил в loadChildren (app-routing.module.ts).

С наилучшими пожеланиями, Билли

Обходной путь

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

export function loadOperatorModule() {
  return OperatorModule;
}

const appRoutes: Routes = [
  {
    path: 'operator',
    loadChildren: loadOperatorModule
  },
  { path: '', redirectTo: '/operator', pathMatch: 'full' }
];

То же самое относится к функциональному модулю (cdm) внутри библиотечного модуля (оператора), обходной путь работает, но никакой подсказки как установить loadChildren со строковым значением, которое не выдает ошибку во время выполнения:

projects\operator\src\lib\operator-routing.module.tsхочет лениво загрузить `projects \ operator \ src \ lib \ cdm \ cdm.module.ts

{ path: 'cdm', loadChildren: 'cdm/cdm.module#CdmModule' }
{ path: 'cdm', loadChildren: 'lib/cdm/cdm.module#CdmModule' }
{ path: 'cdm', loadChildren: './cdm/cdm.module#CdmModule' }
...