NG6: предоставляемый библиотекой сервис не определен - PullRequest
0 голосов
/ 16 мая 2018

Я ищу помощь / указатели / рекомендации по отладке / пониманию проблемы с производным классом, который расширяет предоставляемый библиотекой сервис в проекте 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 ]

0 голосов
/ 19 сентября 2018

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

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

0 голосов
/ 31 мая 2018

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

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

...