NG6: предоставляемый библиотекой сервис не определен

Я ищу помощь / указатели / рекомендации по отладке / пониманию проблемы с производным классом, который расширяет предоставляемый библиотекой сервис в проекте Angular 6.

Я пытаюсь переместить существующий проект Angular 5.x в новый формат рабочей области для angular.json в Angular 6 проектов.

Мой существующий проект состоит из приложения Angular и отдельного общего NgModule который предоставляет услуги и другую функциональность. Общий модуль будет использоваться в нескольких приложениях в такой структуре:

project-root/
    library/
    main-app/
    other-app/

В моем существующем коде NG5 общая библиотека npm link'перешли в основное приложение в виде исходных файлов TS (что хорошо работает для рабочего процесса моей команды, хотя явно не рекомендуется командой CLI).

В приложении NG6 library это проект библиотеки внутри angular.json, построенный как таковой, и извлеченный в проект через определение пути в tsconfig.json, Рабочая область стандартная для NG6:

workspace-root/
    dist/...
    node_modules/...
    projects/
        library/
            src/lib/...
        main-app/
            src/app/...
        other-app/
    ...

В большинстве случаев службы, предоставляемые в библиотеке, используются как есть, но могут быть расширены в основном приложении (или другом приложении) для обеспечения функциональности конкретного приложения. Это отлично работает в Angular 5, но в Angular 6 я получаю следующую ошибку в консоли при попытке загрузить страницу (с ng serve Бег):

Object prototype may only be an Object or null

Предупреждение происходит здесь:

export class FooService extends FooBaseService { // ...
--------------------------------^

FooBaseService становится неопределенным, когда процесс начальной загрузки создает экземпляр FooService.

Основываясь на исследованиях, эта ошибка обычно связана с проблемами циклической зависимости, но я не думаю, что это происходит. Я не получаю никаких предупреждений о том, что я собираюсь создавать библиотеку, или каких-либо проблем, возникающих при создании основного приложения. Кроме того, работает madge -c (ссылка) не найдет ни одного сообщения dist/library или же dist/main-app,

Я вроде как озадачен тем, как приступить к отладке этой проблемы. Кто-нибудь с более глубоким пониманием того, как Angular 6 обрабатывает предоставляемые модулем сервисы, кто мог бы указать мне правильное направление?

2 ответа

Решение

Я думаю, что ваш FooBarService находится внутри библиотеки.
С новой структурой рабочей области, которую предоставляет ng6, библиотеки должны быть собраны перед их использованием. Вы должны 'ng build --prod' (prod потому что AOT) библиотеку, а затем импортировать ее непосредственно как библиотеку, а не из ее источников. например: import FooBarService from 'foobar-service-library';

Вы можете прочитать больше об этом здесь: https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5

Можно ли использовать библиотеку ng6 в приложении ng5 в том же ключе, что и в этом вопросе? Я сталкиваюсь с этой ошибкой:

19:66-82 "export 'defineInjectable' was not found in '@angular/core' как часть нового providedIn особенность, которую использует ng6.

Другие вопросы по тегам