Προγραμματισμός

Τι νέο υπάρχει στο Angular 10.1

Το 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 = ΑΠΛΑ. Αυτή η σημαία θα διασφαλίσει ότι ο αγωγός κατασκευής παράγει οικοδομήσιμα, λειτουργικά αντικείμενα, με κόστος αυξημένου μεγέθους ωφέλιμου φορτίου λόγω απενεργοποίησης προηγμένων βελτιστοποιήσεων.