我有一个 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 的方式将此服务注入我的应用程序?
干杯