【问题标题】:Error encountered resolving symbol values statically静态解析符号值时遇到错误
【发布时间】:2017-05-24 10:06:51
【问题描述】:

在我们的 Angular 2 应用程序中,我们有一个构建错误,但仅在使用“ng build --prod”时,而不是在使用“ng build”或“ng serve”时。错误信息是:

ERROR in Error encountered resolving symbol values statically. Expression form not supported (position 27:55 in the original .ts file), resolving symbol RestService in [...]/src/app/shared-modules/service/rest/rest.service.ts

ERROR in ./src/main.ts
Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory' in 'C:\LPROG\Ldev\Projekte\svn\hippo_branch\frontend\shared\src'
 @ ./src/main.ts 5:0-74
 @ multi ./src/main.ts

相关代码部分是这样的:

    constructor(
      private http: Http,
      private mappingService: MappingService,
      private backendUrlService: BackendUrlService,
      @Inject('RestServiceConfig') public config: {rest_api_name: string}) {

我可以改成这样:

    constructor(
      private http: Http,
      private mappingService: MappingService,
      private backendUrlService: BackendUrlService,
      @Inject('RestServiceConfig') public config: any) {

这适用于“ng build --prod”,我认为我们可以接受这种变化(虽然我还有其他错误,这些不应该相关),但我想知道为什么会这样并且想要强大打字。谁能给我解释一下?

ng -v
    _                      _                 ____ _     ___
   / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
  / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
 / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
/_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
               |___/
@angular/cli: 1.0.0-rc.1
node: 6.9.4
os: win32 x64
@angular/common: 2.4.10
@angular/compiler: 2.4.10
@angular/core: 2.4.10
@angular/forms: 2.4.10
@angular/http: 2.4.10
@angular/platform-browser: 2.4.10
@angular/platform-browser-dynamic: 2.4.10
@angular/router: 3.4.10
@angular/cli: 1.0.0-rc.1
@angular/compiler-cli: 2.4.10

【问题讨论】:

    标签: javascript angular


    【解决方案1】:

    您只在使用ng build --prod 时收到错误的原因是该命令也暗示了--aot 开关。

    Angular 的Ahead of Time 编译要求您的代码可以静态分析。回报是封装尺寸的显着减小。我建议您按如下方式更改您的代码,这将为您提供强大的类型和工作 AOT。还有一个可重用的类型:

    // Before your class
    export interface Config {
      rest_api_name: string;
    }
    
    // In your class
    constructor(
      private http: Http,
      private mappingService: MappingService,
      private backendUrlService: BackendUrlService,
      @Inject('RestServiceConfig') public config: Config) {
    

    【讨论】:

    • 听起来不错。不幸的是,我同时被转移到另一个项目,无法验证。是否有其他人验证过,请告诉我,以便我将其标记为已解决。
    猜你喜欢
    • 2018-01-03
    • 2017-09-06
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2017-06-09
    相关资源
    最近更新 更多