为什么必须导出我在angular appModule导入模块中使用的功能?

ycs*_*hao 2 javascript angular

我有以下代码

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    RoutingModule,
    SharedModule,
    JwtModule.forRoot({
      config: {
        headerName: 'Authorization',
        tokenGetter: () => localStorage.getItem('token’), // <———— this line has problem
        whitelistedDomains: ['localhost:4200']
        //blacklistedRoutes: ['localhost:3001/auth/', 'foo.com/bar/']
      }
    })
  ],
  ...
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

它可以使用ng serve,但运行时出现以下错误ng build --prod

ERROR in Error during template compile of 'AppModule'
  Function expressions are not supported in decorators in '?0'
    '?0' contains the error at app/app.module.ts(36,22)
      Consider changing the function expression into an exported function.
Run Code Online (Sandbox Code Playgroud)

然后我将代码修改为

ERROR in Error during template compile of 'AppModule'
  Function expressions are not supported in decorators in '?0'
    '?0' contains the error at app/app.module.ts(36,22)
      Consider changing the function expression into an exported function.
Run Code Online (Sandbox Code Playgroud)

而且还是不开心

ERROR in app/app.module.ts(19,10): Error during template compile of 
'AppModule'
  Reference to a non-exported function.
Run Code Online (Sandbox Code Playgroud)

最后,我通过导出getToken功能解决了该问题。

我有以下问题

  1. 为什么ng serve可行却不可行ng build --prod
  2. 为什么内联Lambda不起作用?
  3. 为什么必须导出功能?

Dre*_*ess 5

您遇到的问题归因于Angular中的Ahead-of-Time(AOT)编译器。默认情况下,ng serveng build用刚刚实时(JIT)编译器。但是,ng build --prod使用AOT编译器。您可以模拟同样的行为ng serve --aot

所以,对你的问题。

  1. 请参阅上面的说明。
  2. AOT收集器不支持箭头函数 语法
  3. Angular在单独的模块中生成类工厂,该工厂只能访问导出的函数

希望这可以帮助!