NG6:图书馆提供的服务未定义

时间:2018-05-16 08:30:23

标签: angular typescript angular6 angular-cli-v6

我正在寻找帮助/指针/指导来调试/理解派生类的问题,该派生类在Angular 6项目中扩展了库提供的服务。

我正在尝试将现有的Angular 5.x项目移动到Angular 6项目中angular.json的新工作区格式。

我现有的项目包括一个Angular应用程序和一个单独的共享NgModule,它提供服务和其他功能。共享模块将在多个应用程序中使用,结构如下:

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

在我现有的NG5代码中,共享库被npm link作为TS源文件加入到主应用程序中(尽管CLI团队明确不推荐,但它适用于我的团队的工作流程。)

在NG6应用程序中,libraryangular.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/librarydist/main-app中的任何内容。

我对如何继续调试此问题感到困惑。有谁更深入地了解Angular 6如何处理模块提供的服务,他们可能能够指出我正确的方向?

2 个答案:

答案 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功能的一部分。