4

我有一个 Angular2 cli 项目(cli 1.0.0-beta.21)

使用 ng build --prod 和 --dev 时,它可以正常构建和运行

但是如果我尝试ng build --prod --aot我会收到以下错误

静态解析符号值时遇到错误。不支持函数调用。考虑将函数或 lambda 替换为对导出函数的引用,解析符号 AppModule

我已经查看了这个 github 问题,但无法弄清楚我哪里出错了。

这是我的 app.module.ts 文件:

import { BrowserModule } from '@angular/platform-browser';
...
import { LocationStrategy, HashLocationStrategy } from '@angular/common';

import {
    dnnModId,
    dnnSF,
    dnnPortalId,
    dnnTabId,
    dnnEditMode,
    AuthService,
    DnnService
} from './services';

import { AppRoutes } from './app.routes';
...
import { ShiftPartialPipe } from './pipes/shift-partial.pipe';

@NgModule({
  declarations: [
    AppComponent,
    ...
    ShiftEditComponent
  ],
  imports: [
      BrowserModule,
      ...
      HttpModule 
  ],
  providers: [
      AuthGuard,
      AuthService,
      DnnService,
      { provide: LocationStrategy, useClass: HashLocationStrategy },
      { provide: dnnModId, useValue: moduleId },
      { provide: dnnTabId, useValue: tabId },
      { provide: dnnPortalId, useValue: portalId },
      { provide: dnnEditMode, useValue: editMode },
      { provide: dnnSF, useValue: $.ServicesFramework(moduleId) }
   ],
  bootstrap: [AppComponent]

})
export class AppModule { }

我确实使用这样的不透明令牌将一些外部值导入我的应用程序:

export let dnnModId: any = new OpaqueToken('moduleId');
export let dnnPortalId: any = new OpaqueToken('portalId');
export let dnnTabId: any = new OpaqueToken('tabId');
export let dnnSF: any = new OpaqueToken('sf');
export let dnnEditMode: any = new OpaqueToken('editMode');

这可能是我的问题吗?

问题是我的 app.module.ts 中的这一行

 { provide: dnnSF, useValue: $.ServicesFramework(moduleId) }

它从以下导入一个值:

 export let dnnSF: any = new OpaqueToken('sf');

我已将以下内容添加到我的 typing.d.ts 文件中

declare var $: any;

对于上下文:此应用程序必须存在于使用 jquery 函数构建对后端 api 数据的请求的 CMS 中。因此,我需要在我的应用程序中提供该服务,以便为 api 请求获取所需的验证令牌。(我知道这并不理想,但这是必要的。)

问题

如何以适用于 AOT 的方式将此服务注入我的应用程序?

干杯

4

0 回答 0