我在Angular 4中有一个应用程序,我想在视图中的某处显示我的应用程序的版本。版本字符串预计包含在package.json
version
属性中。
我尝试过的是创建一个类并直接将JSON文件导入其中,然后通过getter方法公开该变量:
import * as PACKAGE from './../../../package.json';
export class PackageService {
public static getVersion (): string {
return (PACKAGE as any).version;
}
}
但是,此解决方案会引发编译问题,例如:
ERROR in Error encountered resolving symbol values statically. Expression form not supported (position 8:13 in the original .ts file), resolving symbol PackageService.getVersion in ./src/app/services/package.service.ts, resolving symbol AppModule in ./src/app/app.module.ts, resolving symbol AppModule in ./src/app/app.module.ts
webpack: Failed to compile.
看起来问题在于方法是静态的。当我将此类转换为普通的Angular注射服务时。它编译正确。
我使用静态方法将版本字符串添加到DI容器中:{provide: DI_VERSION, useValue: PackageService.getVersion()}
,其中DI_VERSION
是注入令牌。这将允许我直接访问版本字符串,而无需注入整个服务和调用方法。
究竟是什么原因导致此错误以及如何解决?