Angular 4 - 在静态解析符号值时遇到错误

时间:2017-04-11 11:04:47

标签: angular build angular2-aot

我的一个功能模块包含以下内容:

declare function require(name: string);

@NgModule({
imports: [
// other modules here
ChartModule.forRoot(
  require('highcharts'),
  require('highcharts/highcharts-more'),
  require('highcharts/modules/funnel'),
  require('highcharts/modules/heatmap')
)

它在本地运行正常但是当我使用prod标志构建它时它会失败。我得到的错误是:

  

ERROR in Error遇到静态解析符号值。参考未导出的函数(位置26   :原文.ts文件中的18个),解析符号......

      ./src/main.ts中的错误   找不到模块:错误:无法解析'。/ $ _ gendir / app / app.module.ngfactory'在......

有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:1)

我无法指出您的确切行,因为您没有包含完整的@NgModule装饰器。当你有这样的事情时,这个错误通常在providers数组中:

@NgModule({
// imports, exports and declarations
  providers: [{
    provide: XSRFStrategy, 
    useValue: new CookieXSRFStrategy('RESPONSE_TOKEN', 'RESPONSE_TOKEN') 
  }]
})
export class MyModule {}

当你有这样的内联函数调用时,你不能使用AOT。因此,请将useValue替换为useFactory和导出的函数(如错误消息中所述)。

这是我第一个上市的AOT安全版本:

export function xsrfFactory() {
  return new CookieXSRFStrategy('XSRF-TOKEN', 'X-XSRF-TOKEN');
}
@NgModule({
// imports, exports and declarations
  providers: [{
    provide: XSRFStrategy,
    useFactory: xsrfFactory
  }]
})
export class MyModule {}