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如何处理模块提供的服务,他们可能能够指出我正确的方向?
我猜你的 FooBarService 位于图书馆内。
使用 ng6 提供的新工作空间结构,需要在使用之前构建库。您应该“ng build --prod”(prod,因为 AOT)该库,然后将其直接作为库导入,而不是从其源导入。例如:import FooBarService from 'foobar-service-library';
您可以在这里阅读更多相关信息:https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |