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.