Το Angular 10.1.0, μια έκδοση σημείου παρακολούθησης του Angular 10, κυκλοφόρησε στις 2 Σεπτεμβρίου, φέρνοντας βελτιώσεις στην απόδοση του μεταγλωττιστή και του δρομολογητή μαζί με ένα νέο εργαλείο εξαγωγής μηνυμάτων.
Το Angular 10 έγινε γενικά διαθέσιμο ως κυκλοφορία παραγωγής στις 24 Ιουνίου. Η σημαντική αναβάθμιση στο πλαίσιο που αναπτύχθηκε από την Google και βασίζεται σε TypeScript έδωσε μεγαλύτερη έμφαση στις βελτιώσεις ποιότητας, εργαλείων και οικοσυστημάτων από τις νέες δυνατότητες.
Το Angular 10 είναι μικρότερο από τις προηγούμενες εκδόσεις του Angular. Οι νέες δυνατότητες περιλαμβάνουν ένα νέο εργαλείο επιλογής εύρους ημερομηνιών στη βιβλιοθήκη συστατικών στοιχείων Γωνιακού υλικού και προειδοποιήσεις για εισαγωγές CommonJS. Οι προειδοποιήσεις εισαγωγής CommonJS προειδοποιούν τους προγραμματιστές όταν μια εξάρτηση που είναι συσκευασμένη με το CommonJS θα μπορούσε να οδηγήσει σε μεγαλύτερες, πιο αργές εφαρμογές, επιτρέποντας στους προγραμματιστές να αντικαταστήσουν μια δέσμη μονάδων ECMAScript.
Επιπλέον, οι προαιρετικές αυστηρότερες ρυθμίσεις προσφέρουν μια πιο αυστηρή ρύθμιση έργου κατά τη δημιουργία ενός νέου χώρου εργασίας με νέο
, μέσω ng νέο - αυστηρό
. Η ενεργοποίηση αυτής της σημαίας προετοιμάζει ένα νέο έργο με νέες ρυθμίσεις για τη βελτίωση της συντηρητικότητας, τη βοήθεια εντοπισμού σφαλμάτων και επιτρέπει στο CLI να κάνει προηγμένες βελτιστοποιήσεις σε μια εφαρμογή.
Πού να κατεβάσετε το Angular 10
Μπορείτε να βρείτε τη γενική έκδοση του Angular 10 στο GitHub. Για να ενημερώσετε την τρέχουσα γωνιακή εγκατάσταση, μπορείτε να εκτελέσετε αυτήν την εντολή:
ng ενημέρωση @ angular / cli @ angular / core
Νέες δυνατότητες στο Angular 10.1.0
Η έκδοση Angular 10.1.0, διαθέσιμη στο GitHub, περιλαμβάνει τις ακόλουθες νέες δυνατότητες και βελτιώσεις:
- Για τη βελτίωση της απόδοσης στο πρόγραμμα μεταγλώττισης, το Angular 10.1 έχει μια διόρθωση για παλινδρόμηση απόδοσης που επηρεάζει τη σταδιακή επαναχρησιμοποίηση του προγράμματος.
- Για απόδοση δρομολογητή, το
προτεραιότηταGuardValue
ο χειριστής εφαρμόζεται για βελτιστοποίησηΔυνατότητα φόρτωσης
φύλακες. ProgramBasedEntryPointFinder
θα ξαναχρησιμοποιηθείEntryPointManifest
για να φορτώσετε εξαρτήσεις σημείου εισόδου όταν είναι δυνατόν, κάτι που αποφεύγει να τα αναλύσετε ξανά σε κάθε επίκληση ngcc.- Υποστηρίζεται ένα νέο εργαλείο εξαγωγής μηνυμάτων, το οποίο τελικά θα ενσωματωθεί στο CLI.
- Για το εργαλείο κατασκευής Bazel,
LinkabablePackageInfo
προστίθεται στοng-ενότητα
κανόνα, επιτρέποντας στον σύνδεσμο να συνδεθεί σωστάng_module
στόχους σε ενέργειες χρόνου εκτέλεσης Node.js. - Περισσότερες πληροφορίες προστίθενται στο διαγνωστικό που παράγεται για σφάλματα στατικής αξιολόγησης.
- Προστέθηκε μια επιλογή για απόλυτη υποστήριξη HTTP URL.
- Η υποστήριξη TypeScript 4.0 έχει προστεθεί στον μεταγλωττιστή.
canparse ()
τα διαγνωστικά είναι εκτεθειμένα.- Έχουν γίνει βελτιώσεις απόδοσης στο δρομολογητή, τις φόρμες, το μεταγλωττιστή CLI και το εργαλείο συμβατότητας μεταγλωττιστή ngcc.
- Η τροποποίηση των αγκιστριών κύκλου ζωής μπορεί να γίνει οποιαδήποτε στιγμή πριν από το bootstrap.
- Προσφέρονται πολλές μεγάλες επιδιορθώσεις για πυρήνα, δρομολογητή και άλλα μέρη του Angular.
Νέες δυνατότητες στο Angular 10
Τα βασικά χαρακτηριστικά του Angular 10 περιλαμβάνουν τα ακόλουθα:
- Το TSlib, η βιβλιοθήκη χρόνου εκτέλεσης για TypeScript που περιέχει βοηθητικές λειτουργίες, έχει ενημερωθεί σε TSlib 2.0. Το εργαλείο στατικής ανάλυσης TSLint για TypeScript έχει ενημερωθεί σε TSLint 6.
- Προστέθηκε μια διεπαφή μεταγλωττιστή που περιτυλίγει τον πραγματικό μεταγλωττιστή ngtsc. Ο μεταγλωττιστής για συγκεκριμένες υπηρεσίες γλώσσας διαχειρίζεται πολλαπλά αρχεία ελέγχου τύπου χρησιμοποιώντας τη διεπαφή έργου, δημιουργώντας το Scriptinfos όπως απαιτείται.
- Η διαμόρφωση του προγράμματος περιήγησης για νέα έργα έχει ενημερωθεί ώστε να αποκλείει παλαιότερα, λιγότερο χρησιμοποιημένα προγράμματα περιήγησης. Η υποστήριξη καταργήθηκε για τον Internet Explorer 9, τον Internet Explorer 10 και τον Internet Explorer Mobile.
- Η γωνιακή μορφή πακέτου δεν περιλαμβάνει πλέον πακέτα ESM5 ή FESM5, εξοικονομώντας χρόνο λήψης και εγκατάστασης κατά την εκτέλεση
νήμα
ήεγκατάσταση npm
για γωνιακά πακέτα και βιβλιοθήκες. - Για τον μεταγλωττιστή, προστέθηκαν διαστήματα ονόματος για αναγνώσεις ιδιοτήτων και κλήσεις μεθόδου.
EntryPointFinder
, έχει προστεθεί ένα πρόγραμμα εύρεσης σημείων εισόδου βάσει προγράμματος, το οποίο μπορεί να προκύψει από τις εισαγωγές σε ένα πρόγραμμα που καθορίζεται από ένα αρχείο tsjconfig.json. Αυτό αναμένεται να είναι ταχύτερο από τοDirectoryWalkerEntryPointFinder
όταν το ενεργό πρόγραμμα εισάγει μόνο ένα μικρό ποσοστό των εγκατεστημένων σημείων εισόδου.- Η αυτόματη συμπλήρωση καταργείται από οντότητες HTML, όπως
&αμπέραζ
, λόγω αμφισβητήσιμης αξίας και προβλήματος απόδοσης. - Η ρητή χαρτογράφηση εκτίθεται από το κλείσιμο σε αρχεία devmode. Αυτή η δυνατότητα απευθύνεται σε εργαλεία ανάπτυξης που πρέπει να μεταφράσουν τις εισόδους παραγωγής παραγωγής στα αντίστοιχα devmode τους.
- Σε μια σπάνια αλλαγή, το γενικό έχει καταστεί υποχρεωτικό για
ModuleWithProviders
. Απαιτήθηκε μια παράμετρος γενικού τύπου για τοModuleWithProviders
μοτίβο εργασίας με τη συλλογή Ivy και τον αγωγό απόδοσης, αλλά πριν από αυτήν τη δέσμευση, το View Engine επέτρεψε να παραλειφθεί ο γενικός τύπος. Εάν ένας προγραμματιστής χρησιμοποιείModuleWithProviders
χωρίς γενικό τύπο, μια μετεγκατάσταση έκδοσης 10 θα ενημερώσει τον κώδικα. Αλλά αν ένας προγραμματιστής χρησιμοποιεί το View Engine και ανάλογα με μια βιβλιοθήκη που παραλείπει τον γενικό τύπο, θα εκδοθεί ένα σφάλμα κατασκευής. Σε αυτήν την περίπτωση, το ngcc δεν θα βοηθήσει και η μετεγκατάσταση θα καλύπτει μόνο τον κωδικό εφαρμογής. Θα πρέπει να επικοινωνήσετε με τον συγγραφέα της βιβλιοθήκης για να διορθώσετε τη βιβλιοθήκη τους. Ως λύση, το skipLibChecks θα μπορούσε να οριστεί σε false στο tsconfig ή να ενημερώσει μια εφαρμογή για να χρησιμοποιεί μόνο το Ivy. - Το TypeScript 3.9 είναι πλέον διαθέσιμο, με την υποστήριξη για TypeScript 3.8 να έχει αφαιρεθεί. Αυτή είναι μια σπάνια αλλαγή. Τα TypeScript 3.6 και TypeScript 3.7 επίσης δεν υποστηρίζονται πλέον.
- Έχουν γίνει βελτιώσεις επιδόσεων ελέγχου τύπου στον μεταγλωττιστή-cli.
- Για τη βελτίωση της απόδοσης, ο υπολογισμός του
basePaths
έχει γίνει τεμπέλης, οπότε η εργασία γίνεται μόνο εάν χρειάζεταιTargetedEntryPointFinder
. Προηγουμένως,basePaths
υπολογίστηκε κάθε φορά που ο ανιχνευτής ήταν οργανωμένος, πράγμα που ήταν σπατάλη προσπάθειας στην περίπτωση που το στοχευμένο σημείο εισόδου είχε ήδη υποβληθεί σε επεξεργασία. - Υποστηρίζεται η συγχώνευση πολλαπλών αρχείων μετάφρασης. Προηγουμένως, επιτρέπεται μόνο ένα αρχείο μετάφρασης ανά τοπική γλώσσα. Τώρα οι χρήστες μπορούν να καθορίσουν πολλαπλά αρχεία ανά τοπική ρύθμιση και οι συναλλαγές από κάθε αρχείο θα συγχωνευτούν μέσω μηνυμάτων ID.
- Τα χρονικά όρια κλειδώματος Async μπορούν να ρυθμιστούν. Αυτό προσθέτει υποστήριξη για το αρχείο ngcc.config.js για τη ρύθμιση του
δοκιμάστε ξανά
καιδοκιμάστε ξανά
επιλογές για το AsyncLocker. Μια δοκιμή ενοποίησης προσθέτει έναν νέο έλεγχο για ένα χρονικό όριο και χρησιμοποιεί το ngcc.config.js για να μειώσει τον χρόνο λήξης του χρονικού ορίου για να αποτρέψει την υπερβολική διάρκεια της δοκιμής. - Σε μια αλλαγή, οι προειδοποιήσεις για άγνωστα στοιχεία καταγράφονται τώρα ως σφάλματα. Παρόλο που αυτό δεν θα σπάσει μια εφαρμογή, ενδέχεται να ενεργοποιήσει τα εργαλεία που δεν περιμένουν να καταγραφεί τίποτα μέσω του console.error.
- Σε μια άλλη αλλαγή που σπάει, κάθε επίλυση που επιστρέφει
ΑΔΕΙΑΖΩ
θα ακυρώσει την πλοήγηση. Για να επιτρέπεται η συνέχιση της πλοήγησης, οι προγραμματιστές πρέπει να ενημερώσουν τους αναλυτές για να ενημερώσουν κάποια τιμή, όπωςπροεπιλογή! Άδειο
. - Η προσθήκη πληροφοριών εξάρτησης και επιλογών ng-content στα μεταδεδομένα. Αυτή η προτεινόμενη δυνατότητα μεταγλωττιστή θα παρέχει επιπλέον μεταδεδομένα χρήσιμα για εργαλεία όπως η Υπηρεσία Γωνιακής Γλώσσας, προσφέροντας τη δυνατότητα παροχής προτάσεων για οδηγίες / στοιχεία που ορίζονται στις βιβλιοθήκες.
- Βελτιώσεις απόδοσης, που επιτυγχάνονται μειώνοντας το μέγεθος της δήλωσης εισόδου και μια τεχνική προσωρινής αποθήκευσης στο μανιφέστο. Επιπλέον, η προσωρινή αποθήκευση εξαρτήσεων γίνεται στο μανιφέστο εισόδου και διαβάζεται από εκεί αντί να υπολογίζεται κάθε φορά. Προηγουμένως, ακόμη και αν ένα σημείο εισόδου δεν χρειάστηκε επεξεργασία, το ngcc (μεταγλωττιστής συμβατότητας Angular Ivy) θα αναλύσει τα αρχεία του σημείου εισόδου για τον υπολογισμό των εξαρτήσεων, κάτι που θα απαιτούσε πολύ χρόνο για τις μονάδες big_node.
- Για τη βελτίωση της απόδοσης ngcc, επιτρέπεται η άμεση αναφορά ενός παλιού αρχείου κλειδώματος. Επιπλέον, αποθηκεύεται ένα αποθηκευμένο αντίγραφο ενός αναλυμένου αρχείου tsconfig που μπορεί να επαναχρησιμοποιηθεί εάν η διαδρομή tsconfig είναι η ίδια.
- Σε μια αλλαγή, η λογική έχει ενημερωθεί σχετικά με τη μορφοποίηση περιόδων ημέρας που διασχίζουν τα μεσάνυχτα. Κατά τη διαμόρφωση μιας ώρας με το
σι
ήσι
μορφή κώδικα, η συμβολοσειρά που αποδόθηκε δεν χειριζόταν σωστά περιόδους ημέρας που κάλυπταν ημέρες. Αντ 'αυτού, η λογική επανήλθε στην προεπιλεγμένη περίπτωση τουΕΙΜΑΙ
. Αυτή η λογική έχει ενημερωθεί, ώστε να ταιριάζει με ώρες εντός μιας περιόδου ημέρας που εκτείνεται μετά τα μεσάνυχτα, οπότε θα αποδίδει τώρα τη σωστή έξοδο, όπωςτη νύχτα
στην περίπτωση των Αγγλικών. Εφαρμογές που χρησιμοποιούν και τα δύομορφήΗμερομηνία ()
ήΣωλήνας ημερομηνίας
ή τοσι
καισι
Οι κωδικοί μορφής θα επηρεαστούν από αυτήν την αλλαγή. - Για το δρομολογητή, το
Δυνατότητα φόρτωσης
ο φύλακας τώρα μπορεί να επιστρέψειUrltree
. ΕΝΑΔυνατότητα φόρτωσης
επιστροφή φρουράUrltree
ακυρώνει την τρέχουσα πλοήγηση και ανακατευθύνσεις. Αυτό ταιριάζει με την τρέχουσα συμπεριφορά που είναι διαθέσιμηΜπορεί να ενεργοποιηθεί
φύλακες που έχουν επίσης προστεθεί. Αυτό δεν επηρεάζει την προφόρτιση. ΕΝΑΔυνατότητα φόρτωσης
ο φρουρός αποκλείει οποιαδήποτε προφόρτιση. οποιεσδήποτε διαδρομές με αΔυνατότητα φόρτωσης
ο προφυλακτήρας δεν θα προφορτωθεί και οι φρουροί δεν θα εκτελεστούν ως μέρος της προφόρτωσης. - Πολλαπλασιασμός του σωστού εύρους τιμών σε ένα ExpressionBinding μιας έκφρασης μικροσύνταξης στο ParsedProperty, το οποίο με τη σειρά του θα διαδίδει το εύρος στα πρότυπα ASTs (τόσο VE όσο και Ivy). Αυτή η πρόταση είναι επίσης για τον μεταγλωττιστή.
- Σε μια επιδιόρθωση στον πυρήνα, η λογική θα προστεθεί στη μετεγκατάσταση με μη χρωματισμένη κλάση για να διακοσμήσει παράγωγες κλάσεις μη διακοσμημένων τάξεων που χρησιμοποιούν γωνιακές λειτουργίες.
- Σε μια αλλαγή, ο τύπος του Urlmatcher θα αντικατοπτρίζει ότι θα μπορούσε πάντα να επιστρέψει null.
- Για τον υπάλληλο υπηρεσίας, έχει επιλυθεί μια κατάσταση στην οποία υπήρχε η πιθανότητα ο εργαζόμενος να μην εγγραφεί ποτέ όταν υπάρχει μια μακροχρόνια εργασία ή επαναλαμβανόμενο χρονικό όριο.
- Έχουν γίνει αρκετές διορθώσεις σφαλμάτων, συμπεριλαμβανομένου του μεταγλωττιστή που αποφεύγει τις μη καθορισμένες εκφράσεις σε μια τρύπα συστοιχία και τον πυρήνα αποφεύγοντας ένα σφάλμα μετεγκατάστασης όταν εισάγεται ένα ανύπαρκτο σύμβολο. Υπάρχει επίσης μια λύση για τον πυρήνα του Terser inlining bug. Μια άλλη διόρθωση σφαλμάτων προσδιορίζει σωστά τις ενότητες που επηρεάζονται από παρακάμψεις στο TestBed.
- Το Angular NPM δεν περιέχει πλέον συγκεκριμένα σχόλια jsdoc για να υποστηρίξει τις προηγμένες βελτιστοποιήσεις του Closure Compiler. Αυτή είναι μια σπάνια αλλαγή. Η υποστήριξη για το Closure Compiler σε πακέτα ήταν πειραματική και σπασμένη εδώ και αρκετό καιρό. Όποιος χρησιμοποιεί το Closure Compiler είναι πιθανότατα καλύτερα να καταναλώνει πακέτα γωνίας που δημιουργούνται απευθείας από πηγές αντί να καταναλώνει εκδόσεις που δημοσιεύονται στο NPM. Ως προσωρινή λύση, οι χρήστες μπορούν να εξετάσουν το ενδεχόμενο να χρησιμοποιήσουν τον τρέχοντα αγωγό κατασκευής τους με τη σημαία κλεισίματος
--compilation_level = ΑΠΛΑ
. Αυτή η σημαία θα διασφαλίσει ότι ο αγωγός κατασκευής παράγει οικοδομήσιμα, λειτουργικά αντικείμενα, με κόστος αυξημένου μεγέθους ωφέλιμου φορτίου λόγω απενεργοποίησης προηγμένων βελτιστοποιήσεων.