I have following code
@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 { }
It works using ng serve
, but I got following error when I run 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.
Then I modified my code to
function getToken() {
return localStorage.getItem('token')
}
…
JwtModule.forRoot({
config: {
headerName: 'Authorization',
tokenGetter: () => getToken,
whitelistedDomains: ['localhost:4200’]
...
And it's still not happy
ERROR in app/app.module.ts(19,10): Error during template compile of
'AppModule'
Reference to a non-exported function.
At the end, I solved the issue by exporting the getToken
function.
I have following question
ng serve
works but not ng build --prod
?An export what you put is the exports property of the @NgModule decorator. It enables an Angular module to expose some of its components/directives/pipes to the other modules in the applications. Without it, the components/directives/pipes defined in a module could only be used in that module.
Similarly, the export keyword lets you declare variables, functions, and classes that the module should be exposed to other scripts. Using the export keyword, you can make selected APIs available to other modules. A module's functions, variables, and classes that aren't explicitly exported remain private to the module.
You can export any declarable class —components, directives, and pipes— whether it's declared in this NgModule or in an imported NgModule.
The set of components, directives, and pipes declared in this NgModule that can be used in the template of any component that is part of an NgModule that imports this NgModule. Exported declarations are the module's public API. exports?: Array<Type<any> | any[]> A declarable belongs to one and only one NgModule.
The issues you are having are due to the Ahead-of-Time (AOT) compiler in Angular. By default, ng serve
and ng build
use the Just-in-Time (JIT) compiler. However, ng build --prod
uses the AOT compiler. You can simulate this same behavior doing ng serve --aot
.
So, to your questions.
Hope this helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With