NG6:库提供的服务未定义

Stu*_*ave 12 typescript angular angular6 angular-cli-v6

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

我试图将现有的Angular 5.x项目转换为angular.jsonAngular 6项目中的新工作区格式.

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

project-root/
    library/
    main-app/
    other-app/
Run Code Online (Sandbox Code Playgroud)

在我现有的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/
    ...
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,库中提供的服务按原样使用,但可以在主应用程序(或其他应用程序)中进行扩展,以提供特定于应用程序的功能.这在Angular 5中工作正常,但在Angular 6中,我在控制台中尝试加载页面时出现以下错误(ng serve运行时):

Object prototype may only be an Object or null

警告发生在这里:

export class FooService extends FooBaseService { // ...
--------------------------------^
Run Code Online (Sandbox Code Playgroud)

当引导进程实例化FooService时,FooBaseService以'undefined'形式出现.

根据研究,这个错误通常与循环依赖问题有关,但我不认为这是正在发生的事情.我在构建库时遇到任何circ-dep警告,或构建主应用程序的任何问题.此外,运行madge -c (链接)在任何一个dist/library或中找不到任何circ-deps dist/main-app.

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

Dan*_* R. 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

  • 这并不能 100% 回答我的问题,但它让我朝着正确的方向前进,足以遇到其他问题。 (2认同)