Novità di Angular 10.1.0

Angular 10.1.0, una versione successiva di Angular 10, è stata rilasciata il 2 settembre, portando miglioramenti delle prestazioni al compilatore e al router insieme a un nuovo strumento di estrazione dei messaggi. 

Angular 10 è diventato generalmente disponibile come versione di produzione il 24 giugno. Il principale aggiornamento al framework sviluppato da Google e basato su TypeScript ha posto più enfasi sulla qualità, sugli strumenti e sui miglioramenti dell'ecosistema rispetto alle nuove funzionalità.

Angular 10 è più piccolo delle versioni precedenti di Angular. Le nuove funzionalità includono un nuovo selettore di intervalli di date nella libreria dei componenti dell'interfaccia utente di Angular Material e avvisi per le importazioni CommonJS. Gli avvisi di importazione CommonJS avvisano gli sviluppatori quando una dipendenza confezionata con CommonJS potrebbe comportare applicazioni più grandi e più lente, consentendo agli sviluppatori di sostituire un pacchetto di moduli ECMAScript.

Inoltre, le impostazioni opzionali più rigide offrono una configurazione del progetto più rigorosa quando si crea un nuovo spazio di lavoro con ng new, via ng new --strict. Abilitando questo flag si inizializza un nuovo progetto con nuove impostazioni per migliorare la manutenibilità, aiutare a rilevare i bug e consentire alla CLI di eseguire ottimizzazioni avanzate su un'app.

Dove scaricare Angular 10

Puoi trovare la versione generale di Angular 10 su GitHub. Per aggiornare la tua attuale installazione Angular, puoi eseguire questo comando:

ng update @ angular / cli @ angular / core

Nuove funzionalità in Angular 10.1.0

La versione Angular 10.1.0, disponibile su GitHub, include le seguenti nuove funzionalità e miglioramenti: 

  • Per migliorare le prestazioni nel compilatore-cli, Angular 10.1 ha una correzione per le regressioni delle prestazioni che influenzano il riutilizzo incrementale del programma.
  • Per le prestazioni del router, l' prioritizedGuardValueoperatore viene applicato per ottimizzare le CanLoadprotezioni.
  • ProgramBasedEntryPointFinderverrà riutilizzato EntryPointManifestper caricare le dipendenze del punto di ingresso quando possibile, il che evita di doverle analizzare di nuovo ad ogni invocazione di ngcc.
  • È supportato un nuovo strumento di estrazione dei messaggi, che verrà eventualmente integrato nella CLI.
  • Per lo strumento di compilazione Bazel, LinkabablePackageInfoviene aggiunto alla ng-moduleregola, consentendo al linker di collegare correttamente le ng_moduledestinazioni nelle azioni di runtime di Node.js.
  • Ulteriori informazioni vengono aggiunte alla diagnostica prodotta per gli errori di valutazione statica.
  • È stata aggiunta un'opzione per il supporto HTTP URL assoluto.
  • Il supporto TypeScript 4.0 è stato aggiunto al compilatore.
  • canparse() la diagnostica è esposta.
  • Sono stati apportati miglioramenti alle prestazioni del router, dei moduli, della CLI del compilatore e dello strumento di compatibilità del compilatore ngcc.
  • La modifica degli hook del ciclo di vita può essere eseguita in qualsiasi momento prima del bootstrap.
  • Sono disponibili numerose correzioni importanti per core, router e altre parti di Angular.

Nuove funzionalità in Angular 10

Le caratteristiche principali di Angular 10 includono quanto segue:

  • TSlib, la libreria runtime per TypeScript contenente funzioni di supporto, è stata aggiornata a TSlib 2.0. Lo strumento di analisi statica TSLint per TypeScript è stato aggiornato a TSLint 6.
  • È stata aggiunta un'interfaccia del compilatore che avvolge il compilatore ngtsc effettivo. Il compilatore specifico del servizio linguistico gestisce più file di controllo dei tipi utilizzando l'interfaccia del progetto, creando Scriptinfos secondo necessità.
  • La configurazione del browser per i nuovi progetti è stata aggiornata per escludere i browser meno recenti e meno utilizzati. Il supporto è deprecato per Internet Explorer 9, Internet Explorer 10 e Internet Explorer Mobile.
  • Angular Package Format non include più bundle ESM5 o FESM5, risparmiando tempo di download e installazione durante l'esecuzione yarno npm installper pacchetti e librerie Angular.
  • Per il compilatore, sono stati aggiunti intervalli di nomi per le letture delle proprietà e le chiamate ai metodi.
  • EntryPointFinder, è stato aggiunto un rilevatore di punti di ingresso basato su programma che può essere inizializzato dalle importazioni in un programma specificato da un file tsjconfig.json. Si prevede che sia più veloce di DirectoryWalkerEntryPointFinderquando il programma attivo importa solo una piccola parte dei punti di ingresso installati. 
  • Il completamento automatico è stato rimosso dalle entità HTML, ad esempio &, a causa di un valore discutibile e un problema di prestazioni.
  • La mappatura esplicita viene esposta dalla chiusura ai file devmode. Questa funzionalità è rivolta agli strumenti di sviluppo che devono tradurre gli input di build di produzione nei loro equivalenti devmode.
  • In una modifica sostanziale, il generico è stato reso obbligatorio per ModuleWithProviders. È stato richiesto un parametro di tipo generico affinché il ModuleWithProviderspattern funzionasse con la pipeline di compilazione e rendering di Ivy, ma prima di questo commit, View Engine consentiva di omettere il tipo generico. Se uno sviluppatore utilizza ModuleWithProviderssenza un tipo generico, una migrazione alla versione 10 aggiornerà il codice. Ma se uno sviluppatore utilizza View Engine e dipende da una libreria che omette il tipo generico, verrà generato un errore di build. In questo caso, ngcc non aiuterà e la migrazione coprirà solo il codice dell'applicazione. L'autore della libreria deve essere contattato per correggere la propria libreria. Come soluzione alternativa, skipLibChecks potrebbe essere impostato su false in tsconfig o aggiornando un'app per utilizzare solo Ivy.
  • TypeScript 3.9 è ora disponibile, con il supporto per TypeScript 3.8 rimosso. Questo è un cambiamento decisivo. Anche TypeScript 3.6 e TypeScript 3.7 non sono più supportati.
  • Sono stati apportati miglioramenti alle prestazioni di controllo del tipo al compilatore-cli.
  • Per migliorare le prestazioni, il calcolo di basePathsè stato reso pigro, quindi il lavoro viene svolto solo se necessario in TargetedEntryPointFinder. In precedenza, basePaths veniva calcolato ogni volta che veniva istanziato il finder, il che era uno spreco di sforzi nel caso in cui il punto di ingresso mirato fosse già stato elaborato.
  • È supportata l'unione di più file di traduzione. In precedenza, era consentito un solo file di traduzione per locale. Ora gli utenti possono specificare più file per locale e le transazioni di ogni file verranno unite dall'ID di messaggistica.
  • È possibile configurare timeout di blocco asincrono. Ciò aggiunge il supporto per il file ngcc.config.js per l'impostazione delle  opzioni retryAttemptse retryDelayper AsyncLocker. Un test di integrazione aggiunge un nuovo controllo per un timeout e utilizza ngcc.config.js per ridurre il tempo di timeout per evitare che il test richieda troppo tempo.
  • In una modifica sostanziale, gli avvisi sugli elementi sconosciuti ora vengono registrati come errori. Sebbene ciò non interrompa un'app, potrebbe far scattare strumenti che non si aspettano che nulla venga registrato tramite console.error. 
  • In un'altra modifica decisiva, qualsiasi resolver che ritorna EMPTYannullerà la navigazione. Per consentire la prosecuzione della navigazione, gli sviluppatori devono aggiornare i resolver per aggiornare alcuni valori, come default!Empty.
  • L'aggiunta di informazioni sulle dipendenze e selettori di contenuto ng ai metadati. Questa funzione del compilatore proposta fornirebbe metadati aggiuntivi utili per strumenti come Angular Language Service, offrendo la possibilità di fornire suggerimenti per direttive / componenti definiti nelle librerie.
  • Miglioramenti delle prestazioni, ottenuti riducendo le dimensioni del manifesto del punto di ingresso e una tecnica di memorizzazione nella cache nel manifesto. Inoltre, la memorizzazione nella cache delle dipendenze viene eseguita nel manifesto del punto di ingresso e letta da lì anziché essere calcolata ogni volta. In precedenza, anche se un punto di ingresso non necessitava di elaborazione, ngcc (compilatore di compatibilità Angular Ivy) analizzava i file del punto di ingresso per calcolare le dipendenze, il che richiedeva molto tempo per i moduli large_node.
  • Per migliorare le prestazioni di ngcc, è ora consentita la segnalazione immediata di un file di blocco obsoleto. Inoltre, viene memorizzata una copia memorizzata nella cache di un file tsconfig analizzato che può essere riutilizzato se il percorso tsconfig è lo stesso.
  • In una modifica sostanziale, la logica è stata aggiornata relativa alla formattazione dei periodi del giorno che attraversano la mezzanotte. Durante la formattazione di un'ora con il codice di formato bo B, la stringa sottoposta a rendering non gestiva correttamente i periodi di un giorno che comprendevano giorni. Invece, la logica stava tornando al caso predefinito di AM. Questa logica è stata aggiornata in modo che corrisponda agli orari di un periodo di un giorno che si estende oltre la mezzanotte, quindi ora restituirà l'output corretto, come at nightnel caso dell'inglese. Le applicazioni che utilizzano formatDate()o DatePipeo i codici di formato bBsaranno interessate da questa modifica.
  • Per il router, la CanLoadguardia ora può tornare Urltree. Una CanLoadguardia che ritorna Urltreeannulla la navigazione corrente e reindirizza. Ciò corrisponde al comportamento corrente disponibile per le CanActivateguardie che è stato aggiunto. Ciò non influisce sul precarico. Una CanLoadprotezione blocca qualsiasi precarico; eventuali percorsi con una CanLoadguardia non verranno precaricati e le protezioni non verranno eseguite come parte del precarico.
  • Propagazione dell'intervallo di valori corretto in un ExpressionBinding di un'espressione di microsintassi a ParsedProperty, che a sua volta propagherebbe l'intervallo agli AST del modello (sia VE che Ivy). Questa proposta è anche per il compilatore.
  • In una correzione al nucleo, la logica verrebbe aggiunta alla migrazione di classi non decorate per decorare classi derivate di classi non decorate che utilizzano funzionalità angolari.
  • In una modifica sostanziale, il tipo di Urlmatcher rifletterà che potrebbe sempre restituire null.
  • Per il service worker, è stata introdotta una correzione per una situazione in cui c'era la possibilità che il service worker non si registrasse mai quando c'è un'attività di lunga durata o un timeout ricorrente.
  • Sono state apportate numerose correzioni di bug, incluso il compilatore che evita espressioni indefinite in un array bucato e il nucleo che evita un errore di migrazione quando viene importato un simbolo inesistente. C'è anche una soluzione alternativa nel core per il bug inlining di Terser. Un'altra correzione di bug identifica correttamente i moduli interessati dalle sostituzioni in TestBed.
  • Angular NPM non contiene più alcuni commenti jsdoc per supportare le ottimizzazioni avanzate di Closure Compiler. Questo è un cambiamento decisivo. Il supporto per Closure Compiler nei pacchetti è sperimentale e non funzionante da tempo. Chiunque utilizzi Closure Compiler è probabilmente meglio consumare pacchetti Angular compilati direttamente dai sorgenti piuttosto che consumare versioni pubblicate su NPM. Come soluzione temporanea, gli utenti possono prendere in considerazione l'utilizzo della pipeline di build corrente con il flag di chiusura --compilation_level=SIMPLE. Questo flag assicurerà che la pipeline di build produca artefatti costruibili ed eseguibili, al costo di una maggiore dimensione del payload a causa della disabilitazione delle ottimizzazioni avanzate.