Co nowego w Angular 10.1.0

Angular 10.1.0, kolejne wydanie Angulara 10, zostało wydane 2 września, wprowadzając ulepszenia wydajności kompilatora i routera, a także nowe narzędzie do ekstrakcji wiadomości. 

Angular 10 stał się ogólnie dostępny jako wydanie produkcyjne 24 czerwca. W głównej aktualizacji opracowanej przez Google platformy opartej na języku TypeScript położono większy nacisk na jakość, ulepszenia narzędzi i ekosystemu niż na nowe funkcje.

Angular 10 jest mniejszy niż poprzednie wersje Angular. Nowe możliwości obejmują nowy selektor zakresu dat w bibliotece komponentów interfejsu użytkownika Angular Material oraz ostrzeżenia dotyczące importu CommonJS. Ostrzeżenia importu CommonJS ostrzegają programistów, gdy zależność spakowana z CommonJS może skutkować większymi, wolniejszymi aplikacjami, umożliwiając programistom zastąpienie pakietu modułów ECMAScript.

Ponadto opcjonalne, bardziej rygorystyczne ustawienia oferują bardziej rygorystyczną konfigurację projektu podczas tworzenia nowego obszaru roboczego za ng newpomocą, via ng new --strict. Włączenie tej flagi inicjuje nowy projekt z nowymi ustawieniami, aby poprawić łatwość konserwacji, pomóc w wyłapywaniu błędów i umożliwić interfejsowi wiersza polecenia wykonywanie zaawansowanych optymalizacji aplikacji.

Skąd pobrać Angular 10

Ogólne wydanie Angular 10 można znaleźć na GitHub. Aby zaktualizować bieżącą instalację Angular, możesz uruchomić to polecenie:

ng update @ angular / cli @ angular / core

Nowe funkcje w Angular 10.1.0

Wydanie Angular 10.1.0, dostępne na GitHub, zawiera następujące nowe możliwości i ulepszenia: 

  • Aby poprawić wydajność w kompilatorze-CLI, Angular 10.1 ma poprawkę dotyczącą regresji wydajności wpływających na przyrostowe ponowne użycie programu.
  • Jeśli chodzi o wydajność routera, prioritizedGuardValueoperator musi zoptymalizować CanLoadosłony.
  • ProgramBasedEntryPointFinderużyje ponownie EntryPointManifestdo załadowania zależności punktu wejścia, gdy będzie to możliwe, co pozwoli uniknąć konieczności ponownego analizowania ich przy każdym wywołaniu ngcc.
  • Obsługiwane jest nowe narzędzie do wyodrębniania wiadomości, które ostatecznie zostanie zintegrowane z interfejsem CLI.
  • W przypadku narzędzia do budowania Bazel, LinkabablePackageInfojest dodawane do ng-modulereguły, umożliwiając konsolidatorowi prawidłowe łączenie ng_modulecelów w akcjach środowiska wykonawczego Node.js.
  • Do diagnostyki tworzonej dla błędów oceny statycznej dodaje się więcej informacji.
  • Dodano opcję bezwzględnej obsługi protokołu HTTP z adresem URL.
  • Do kompilatora dodano obsługę języka TypeScript 4.0.
  • canparse() diagnostyka jest narażona.
  • Poprawiono wydajność routera, formularzy, interfejsu wiersza polecenia kompilatora i narzędzia zgodności kompilatora ngcc.
  • Modyfikację haków cyklu życia można przeprowadzić w dowolnym momencie przed bootstrapem.
  • Dostępnych jest wiele dużych poprawek dla rdzenia, routera i innych części Angular.

Nowe funkcje w Angular 10

Kluczowe cechy Angular 10 obejmują:

  • TSlib, biblioteka wykonawcza dla TypeScript zawierająca funkcje pomocnicze, została zaktualizowana do TSlib 2.0. Narzędzie do analizy statycznej TSLint dla języka TypeScript zostało zaktualizowane do wersji TSLint 6.
  • Dodano interfejs kompilatora, który otacza rzeczywisty kompilator ngtsc. Kompilator specyficzny dla usługi językowej zarządza wieloma plikami sprawdzania typu za pomocą interfejsu projektu, tworząc w razie potrzeby Scriptinfos.
  • Konfiguracja przeglądarki dla nowych projektów została zaktualizowana, aby wykluczyć starsze, rzadziej używane przeglądarki. Obsługa programów Internet Explorer 9, Internet Explorer 10 i Internet Explorer Mobile została wycofana.
  • Angular Package Format nie obejmuje już pakietów ESM5 ani FESM5, co pozwala zaoszczędzić czas pobierania i instalacji podczas pracy yarnlub w npm installprzypadku pakietów i bibliotek Angular.
  • W przypadku kompilatora zakresy nazw zostały dodane do odczytów właściwości i wywołań metod.
  • EntryPointFinder, bazująca na programie wyszukiwarka punktów wejścia, została dodana z importu w programie określonym przez plik tsjconfig.json. Oczekuje się, że będzie to szybsze niż DirectoryWalkerEntryPointFinderwtedy, gdy aktywny program importuje tylko niewielką część zainstalowanych punktów wejścia. 
  • Autouzupełnianie jest usuwane z jednostek HTML, na przykład z &powodu wątpliwej wartości i problemu z wydajnością.
  • Jawne mapowanie jest ujawniane od zamknięcia do plików devmode. Ta funkcja jest przeznaczona dla narzędzi programistycznych, które muszą tłumaczyć dane wejściowe kompilacji produkcyjnej na ich odpowiedniki w trybie devmode.
  • Przełomowa zmiana stała się obowiązkowa dla ModuleWithProviders. Parametr typu ogólnego był wymagany, aby ModuleWithProviderswzorzec działał z potokiem kompilacji i renderowania Ivy, ale przed tym zatwierdzeniem silnik widoku zezwalał na pominięcie typu ogólnego. Jeśli programista używa typu ModuleWithProvidersbez typu ogólnego, migracja do wersji 10 zaktualizuje kod. Ale jeśli programista korzysta z aparatu widoku iw zależności od biblioteki, która pomija typ ogólny, zostanie wystawiony błąd kompilacji. W takim przypadku ngcc nie pomoże, a migracja obejmie tylko kod aplikacji. Należy skontaktować się z autorem biblioteki, aby naprawić swoją bibliotekę. Aby obejść ten problem, parametr skipLibChecks można ustawić na wartość false w tsconfig lub zaktualizować aplikację, aby korzystała tylko z Ivy.
  • Obecnie dostępny jest język TypeScript 3.9, a obsługa języka TypeScript 3.8 została usunięta. To przełomowa zmiana. Również TypeScript 3.6 i TypeScript 3.7 nie są już obsługiwane.
  • Ulepszenia wydajności sprawdzania typu zostały wprowadzone w kompilatorze cli.
  • Aby poprawić wydajność, obliczenia basePathszostały opóźnione, więc praca jest wykonywana tylko w razie potrzeby w programie TargetedEntryPointFinder. Wcześniej basePaths był obliczany za każdym razem, gdy tworzono instancję wyszukiwarki, co było stratą pracy w przypadku, gdy docelowy punkt wejścia został już przetworzony.
  • Obsługiwane jest łączenie wielu plików tłumaczeniowych. Wcześniej dozwolony był tylko jeden plik tłumaczenia na język. Teraz użytkownicy mogą określać wiele plików na lokalizację, a transakcje z każdego pliku zostaną scalone według identyfikatora wiadomości.
  • Można skonfigurować limity czasu blokowania asynchronicznego. Dodaje to obsługę pliku ngcc.config.js do ustawiania  opcji retryAttemptsi retryDelaydla AsyncLocker. Test integracji dodaje nowe sprawdzenie limitu czasu i używa pliku ngcc.config.js do skrócenia limitu czasu, aby test nie trwał zbyt długo.
  • W przypadku istotnej zmiany ostrzeżenia o nieznanych elementach są teraz rejestrowane jako błędy. Chociaż nie zepsuje to aplikacji, może spowodować wyłączenie narzędzi, które nie oczekują, że nic nie zostanie zarejestrowane przez console.error. 
  • W innej istotnej zmianie każdy zwracający program rozpoznawania nazw EMPTYanuluje nawigację. Aby umożliwić kontynuację nawigacji, programiści muszą zaktualizować programy rozpoznawania nazw, aby zaktualizować niektóre wartości, takie jak default!Empty.
  • Dodanie informacji o zależnościach i selektorów zawartości ng do metadanych. Ta proponowana funkcja kompilatora zapewniłaby dodatkowe metadane przydatne dla narzędzi takich jak Angular Language Service, oferując możliwość dostarczania sugestii dotyczących dyrektyw / komponentów zdefiniowanych w bibliotekach.
  • Ulepszenia wydajności osiągnięte przez zmniejszenie rozmiaru manifestu punktu wejścia i techniki buforowania w manifeście. Ponadto buforowanie zależności jest wykonywane w manifeście punktu wejścia i odczytywane z niego, a nie za każdym razem obliczane. Wcześniej, nawet jeśli punkt wejścia nie wymagał przetwarzania, ngcc (kompilator kompatybilności z Angular Ivy) parsował pliki punktu wejścia w celu obliczenia zależności, co zajmowało dużo czasu w przypadku modułów large_node.
  • Aby poprawić wydajność ngcc, dozwolone jest teraz natychmiastowe zgłaszanie nieaktualnego pliku blokady. Ponadto przechowywana jest zbuforowana kopia przeanalizowanego pliku tsconfig, którego można użyć ponownie, jeśli ścieżka tsconfig jest taka sama.
  • W związku z istotną zmianą zaktualizowano logikę dotyczącą formatowania okresów dziennych, które przekraczają północ. Podczas formatowania godziny za pomocą kodu formatu blub B, renderowany ciąg nie obsługiwał prawidłowo okresów dziennych obejmujących dni. Zamiast tego logika wracała do domyślnego przypadku AM. Ta logika została zaktualizowana, aby dopasować czasy w ciągu dnia, który przypada po północy, więc będzie teraz wyświetlał prawidłowe dane wyjściowe, takie jak at nightw przypadku języka angielskiego. Ta zmiana wpłynie na aplikacje korzystające z kodów formatu formatDate()lub DatePipelub bB.
  • W przypadku routera CanLoadstrażnik może teraz wrócić Urltree. CanLoadOsłona powrocie Urltreeanuluje aktualną nawigację i przekierowań. Jest to zgodne z obecnym zachowaniem dostępnym dla CanActivatestrażników, które również zostało dodane. Nie ma to wpływu na wstępne ładowanie. A CanLoadbloki guard dowolnego obciążenia wstępnego; wszelkie trasy z CanLoadosłonami nie będą wstępnie ładowane, a osłony nie będą wykonywane w ramach wstępnego ładowania.
  • Propagacja prawidłowego zakresu wartości w ExpressionBinding wyrażenia microsyntax do ParsedProperty, co z kolei spowoduje propagację zakresu do szablonów AST (zarówno VE, jak i Ivy). Ta propozycja jest również dla kompilatora.
  • W poprawce do rdzenia logika została dodana do migracji klas bez dekoracji, aby udekorować klasy pochodne klas bez dekoracji, które używają funkcji Angular.
  • W przypadku istotnej zmiany typ Urlmatcher będzie odzwierciedlał, że zawsze może zwracać wartość null.
  • W przypadku pracownika serwisowego naprawiono sytuację, w której istniała szansa, że ​​pracownik serwisu nigdy się nie zarejestruje, gdy istnieje długotrwałe zadanie lub powtarzający się limit czasu.
  • Wprowadzono szereg poprawek błędów, w tym kompilator unikający niezdefiniowanych wyrażeń w dziurawej tablicy i rdzeń unikający błędu migracji, gdy importowany jest nieistniejący symbol. W rdzeniu znajduje się również obejście błędu wewnętrznego Tersera. Inna poprawka błędu poprawnie identyfikuje moduły, na które mają wpływ zastąpienia w TestBed.
  • Angular NPM nie zawiera już pewnych komentarzy jsdoc do obsługi zaawansowanych optymalizacji kompilatora Closure Compiler. To przełomowa zmiana. Wsparcie dla Closure Compiler w pakietach było od jakiegoś czasu eksperymentalne i zepsute. Każdy, kto używa Closure Compiler, prawdopodobnie lepiej będzie korzystał z pakietów Angular zbudowanych bezpośrednio ze źródeł, niż z wersji opublikowanych w NPM. W ramach tymczasowego obejścia użytkownicy mogą rozważyć użycie bieżącego potoku kompilacji z flagą zamknięcia --compilation_level=SIMPLE. Ta flaga zapewni, że potok kompilacji tworzy możliwe do zbudowania, działające artefakty, kosztem zwiększonego rozmiaru ładunku z powodu wyłączenia zaawansowanych optymalizacji.