我正在寻找帮助/指针/指导来调试/理解派生类的问题,该派生类在Angular 6项目中扩展了库提供的服务。
我正在尝试将现有的Angular 5.x项目移动到Angular 6项目中angular.json
的新工作区格式。
我现有的项目包括一个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以'undefined'形式出现。
根据研究,这个错误通常与循环依赖问题有关,但我不认为这是正在发生的事情。我在构建库时遇到任何circ-dep警告,或构建主应用程序的任何问题。此外,运行madge -c
(link)无法找到dist/library
或dist/main-app
中的任何内容。
我对如何继续调试此问题感到困惑。有谁更深入地了解Angular 6如何处理模块提供的服务,他们可能能够指出我正确的方向?
答案 0 :(得分:2)
我猜你的FooBarService位于图书馆内
使用ng6提供的新工作空间结构,需要在使用它们之前构建库。您应该构建--prod'(prod因为AOT)库,然后直接将其作为库导入,不来自其来源。例如:import FooBarService from 'foobar-service-library'
;
您可以在此处详细了解:https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5
答案 1 :(得分:-1)
与该问题相同,是否可以在ng5应用中使用ng6库?我遇到了这个错误:
19:66-82 "export 'defineInjectable' was not found in '@angular/core'
作为ng6使用的新providedIn
功能的一部分。