我正在寻求帮助/指针/指导以调试/理解派生类的问题,该派生类扩展了 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 { // ...
--------------------------------^
当引导进程实例化 FooService 时,FooBaseService 以“未定义”的形式出现。
根据研究,此错误通常与循环依赖问题有关,但我不认为这是正在发生的事情。构建库时,我没有收到任何 circ-dep 警告,或者构建主应用程序时出现任何问题。此外,运行madge -c
(link)dist/library
在或中都找不到任何 circ-deps dist/main-app
。
我对如何继续调试此问题感到困惑。任何对 Angular 6 如何处理模块提供的服务有更深入了解的人都可以为我指明正确的方向吗?