构建 Angular 6 库时,在导出的符号元数据中遇到错误。

18

在我的库中执行'ng build'时,出现以下错误。

我目前正在使用Angular 6,但我认为这个错误与版本无关。

/home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:13:1: 在导出符号“KeycloakService”生成的元数据中遇到错误:
/home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:18:12: 收集到的元数据包含一个运行时将报告的错误:因为模板编译器需要此变量的值,所以只能引用已初始化的变量和常量。
{"__symbolic":"error","message":"Variable not initialized","line":17,"character":11} Error: /home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:13:1: 在导出符号“KeycloakService”生成的元数据中遇到错误:
/home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:18:12: 收集到的元数据包含一个运行时将报告的错误:因为模板编译器需要此变量的值,所以只能引用已初始化的变量和常量。
{"__symbolic":"error","message":"Variable not initialized","line":17,"character":11} at /home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/metadata/collector.js:707:31 at Array.forEach () at validateMetadata (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/metadata/collector.js:695:46) at MetadataCollector.getMetadata (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/metadata/collector.js:550:21) at MetadataCache.getMetadata (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/metadata_cache.js:86:41) at Object.getSourceFileMetadata (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/compiler_host.js:112:56) at Object.readMetadata (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/metadata_reader.js:46:37) at TsCompilerAotCompilerTypeCheckHostAdapter.getMetadataFor (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/compiler_host.js:464:38) at StaticSymbolResolver.getModuleMetadata (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler/src/aot/static_symbol_resolver.js:480:49) at StaticSymbolResolver._createSymbolsOf (/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler/src/aot/static_symbol_resolver.js:268:33)

keycloak.service.ts:

import { Injectable } from '@angular/core';
import { KeycloakLoginOptions } from './keycloak.d';

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

import * as Keycloak from './keycloak';

export type KeycloakClient = Keycloak.KeycloakInstance;
type InitOptions = Keycloak.KeycloakInitOptions;

@Injectable()
export class KeycloakService {

    constructor(private http: HttpClient) { }

    static keycloakAuth: KeycloakClient;

.... More code here
5个回答

34

在声明静态方法的类之前添加// @dynamic


4
很好听到为什么这解决了问题。 - starcorn
对我来说,这与static方法有关。添加// @dynamic可以解决它。 - dude

5
今天我在一个提供静态方法作为助手的“util”类中遇到了这个问题。我通过将“this”替换为“ObjectUtils”(类名本身)来解决它,它可以工作。如@NicolasThierion在他的回复中所提到的,你也可以尝试以下hack。
// @dynamic
export class SomeClass {
    public static get() { return 'someValue'; } 
}

4

我正在使用 Angular V8 并遇到了同样的问题。Angular 不允许静态变量未被初始化。解决方法是将其初始化为 null,以避免错误。

@Injectable()
export class ExampleService {

    static URL: string = null;
...

1
当它指向一个getter函数时,这将不起作用! - user169771
谢谢,它可以工作。只需添加默认值,可能为null。 - Titus Sutio Fanpula

0

我的经验是在方法的构造函数中错误地使用了静态值。应该使用Foo.STATIC_VALUE而不是this.STATIC_VALUE来引用静态值。

class Foo {
  static STATIC_VALUE = 'hi';

  constructor(
    private bar: string
  ) {}

  static defoo(): Foo {
    return Foo(this.STATIC_VALUE);
  }
}

方法 defoo 应该已经被定义

  static defoo(): Foo {
    return Foo(Foo.STATIC_VALUE);
  }

-1
我曾经遇到过同样的问题,通过将变量中的“static”关键字删除,我解决了这个问题。

1
移除 static 关键字会从根本上改变你使用变量的方式和位置。 - Doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接