typescript - avisos de otimização de dependências CommonJS ou AMD do rxjs e loadash após atualizar para Angular 10
Eu atualizei minha aplicação do Angular 9 para o Angular 10. O processo de atualização foi bem-sucedido e eu consigo executar a aplicação. Mas quando eu executo o comando ng serve, ele mostra os seguintes avisos.
WARNING in src\app\auth\guard\auth.guard.ts depends on 'lodash'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies
WARNING in src\app\shared\services\api.service.ts depends on 'rxjs/Observable'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies
WARNING in src\app\auth\guard\auth.guard.ts depends on 'rxjs/observable/fromPromise'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies
WARNING in src\app\shared\services\localforage.service.ts depends on 'rxjs/observable/forkJoin'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies
WARNING in src\app\auth\guard\auth.guard.ts depends on 'rxjs/add/operator/map'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies
Existe uma solução alternativa que algumas pessoas sugerem usando whitelist para o commonJS, mas ainda assim isso causará um aumento no tamanho do pacote. Como posso me livrar desse problema do commonJS e ainda assim obter um tamanho de pacote otimizado?
PS: O código final com o operador map
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { switchMap, tap, map } from 'rxjs/operators';
import { Observable, from} from 'rxjs';
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.getToken().map((token: any) => {
if ((token !==null) && !this.jwtHelper.isTokenExpired(token.data)) {
// this.proactiveTokenRefresh(token);
return true;
}
// Store the attempted URL for redirecting
this.localForage.setItem('redirectUrl', state.url).then(() => {
// Navigate to the login page
this.router.navigate(['/login']);
return false;
});
});
}
private getToken(): Observable<{}> {
const token = this.localForage.getItem('id_token');
return from(token);
}`
Resposta #1
A partir dos avisos, abaixo ajudará
- Por favor, verifique todas as suas importações de
rxjs
import {Observable, fromPromise} from 'rxjs'
import {map, forkJoin} from 'rxjs/operators'
Também observe como canalizar seus operadores como abaixo
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { switchMap, tap, map } from 'rxjs/operators';
import { Observable, from} from 'rxjs';
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.getToken().pipe(
map((token: any) => {
if ((token !==null) && !this.jwtHelper.isTokenExpired(token.data)) {
// this.proactiveTokenRefresh(token);
return true;
}
// Store the attempted URL for redirecting
this.localForage.setItem('redirectUrl', state.url).then(() => {
// Navigate to the login page
this.router.navigate(['/login']);
return false;
});
});
)
}
private getToken(): Observable<{}> {
const token = this.localForage.getItem('id_token');
return from(token);
}
- Para
lodash, tente substituir as funções do lodash por várias funções disponíveis no ES2015
