Τον Απρίλιο του 2022 εκδόθηκε η έκδοση NodeJS Node v18. Η ενημέρωση Node v18 ήταν μια από τις πιο αναμενόμενες ενημερώσεις από το Node v14, το οποίο πρόσθεσε ασυγχρονισμένο API τοπικής αποθήκευσης, μια διεπαφή συστήματος συναρμολόγησης Ιστού (WASI) και υποστήριξη για μονάδες ECMAScript.
Η αναβάθμιση v18 προσθέτει διάφορες βελτιώσεις στο NodeJS, συμπεριλαμβανομένου ενός API ανάκτησης παγκοσμίως με δυνατότητα προεπιλογής, υποστήριξης API ροής ιστού και μιας βασικής μονάδας δοκιμής εκτέλεσης. Εδώ καλύπτουμε τις περισσότερες από τις σημαντικές αλλαγές στο NodeJS στο v18.
1. Το Fetch API
Το fetch API παρέχει μια διεπαφή για πρόσβαση και χειρισμό αιτημάτων και απαντήσεων HTTP. Πριν από το NodeJS v18, τα αιτήματα HTTP που έγιναν με το NodeJS απαιτούσαν βιβλιοθήκες τρίτων όπως αξιος και κόμβος-ανάκτηση ή το περίπλοκο http ή https πακέτο.
Το NodeJS v18 καθιστά το fetch API διαθέσιμο σε παγκόσμιο εύρος από προεπιλογή. Το παγκόσμιο API ανάκτησης εξαλείφει την ανάγκη για βιβλιοθήκες τρίτων όπως αξιος και ο αναλυτικός κώδικας που σχετίζεται με το
https πακέτο κατά την ανάκτηση πόρων ασύγχρονα σε ένα δίκτυο.Ακολουθεί ένα παράδειγμα χρήσης του API:
συνθ getData = ασυγχρονισμόςλειτουργία () {
προσπαθήστε {
συνθ res = αναμένω fetch("https://example.com/users");
συνθ δεδομένα = αναμένω res.json();
κονσόλα.log (δεδομένα);
} σύλληψη (λάθος) {
κονσόλα.κούτσουρο(`Κάτι πήγε στραβά, ${λάθος}`);
}
};
getData();
ο getData Η παραπάνω συνάρτηση στέλνει α ΠΑΙΡΝΩ αίτημα για ανάκτηση των πόρων από " https://example.com/users". Το fetch API λαμβάνει επίσης μια προαιρετική δεύτερη παράμετρο, ένα αντικείμενο επιλογών. Τα αντικείμενα επιλογών πρέπει να περιέχουν λεπτομέρειες σχετικά με το αίτημα. Για παράδειγμα:
συνθ UserData = {
όνομα: "Τζον Σνόου",
ηλικία: 25,
γένος: "Μ",
};
συνθ postData = ασυγχρονισμόςλειτουργία (δεδομένα) {
προσπαθήστε {
συνθ res = αναμένω fetch("https://example.com/users", {
μέθοδος: "ΘΕΣΗ",
σώμα: JSON.stringify (δεδομένα),
});
συνθ απάντησηΔεδομένα = αναμένω res.json();
κονσόλα.κούτσουρο(
«Το αίτημα ήταν επιτυχές, Ακολουθούν οι λεπτομέρειες: ${responseData}`
);
} σύλληψη (λάθος) {
κονσόλα.κούτσουρο(«Το αίτημα ήταν ανεπιτυχές, Ακολουθούν οι λεπτομέρειες: ${λάθος}`);
}
};
postData (userData);
Αν και το fetch API είναι ακόμα πειραματικός, θα πρέπει να λειτουργεί καλά για τους περισσότερους χρήστες.
2. Υποστήριξη για το Web Streams API
Σκεφτείτε εφαρμογές πολυμέσων ή σε πραγματικό χρόνο. Αυτή είναι μια βασική περίπτωση χρήσης του API web-streams. Το API ροών Ιστού είναι ένα σύνολο διεπαφών που επιτρέπουν την προγραμματική κατανομή ενός μεγάλου πόρου που λαμβάνεται μέσω ενός δικτύου σε μικρά κομμάτια και, στη συνέχεια, τον επεξεργάζεται λίγο-λίγο.
Ένα παράδειγμα ροής είναι το σώμα απόκρισης που επιστρέφεται από έναν επιτυχημένο φέρω αίτηση. Το σώμα απόκρισης είναι του τύπου ReadableStream.
Το NodeJS v18 εκθέτει ένα πειραματικός υλοποίηση του API ροών Ιστού. Με αυτήν την ενημέρωση, τα API ροής ιστού είναι πλέον διαθέσιμα τόσο στον πελάτη όσο και στον διακομιστή, κάνοντας την ανάπτυξη πιο απλή.
Μπορείτε να βρείτε μια λίστα με τις τρέχουσες υποστηριζόμενες ροές στο επίσημες σημειώσεις έκδοσης.
3. Η ενότητα Test Runner
Σε παλαιότερες εκδόσεις του NodeJS, η δοκιμή χωρίς βιβλιοθήκες τρίτων γινόταν με το ενσωματωμένο διεκδικώ βιβλιοθήκη.
ο διεκδικώ Η βιβλιοθήκη διευκόλυνε τη σύνταξη απλών δοκιμών, αλλά είχε σημαντικούς περιορισμούς που καθιστούσαν δύσκολη την εργασία με πολλαπλές σουίτες δοκιμών. Αυτοί οι περιορισμοί ενίσχυσαν την ανάγκη για βιβλιοθήκες τρίτων όπως το Jest να εκτελούν πιο προηγμένες δοκιμές.
Το NodeJS v18 εξαλείφει την ανάγκη για βιβλιοθήκες τρίτων με την εισαγωγή της βασικής λειτουργικής μονάδας δοκιμής του NodeJS. Ο δοκιμαστικός δρομέας υποστηρίζει λειτουργίες όπως υποδοκιμές, παράβλεψη δοκιμών, δοκιμές επανάκλησης κ.λπ., όπως το Jest.
Για να χρησιμοποιήσετε τον δοκιμαστικό δρομέα, πρέπει να κάνετε εισαγωγή διεκδικώ από διεκδικώ και δοκιμή από κόμβος: δοκιμή. Προσέξτε το "κόμβος:" πρόθεμα; είναι το νέο πρωτόκολλο της Node που διακρίνει τα πακέτα πυρήνων κόμβων από τα πακέτα που δημιουργούνται από τους χρήστες.
συνθδιεκδικώ = απαιτείται ("διεκδικώ");
συνθ δοκιμή = απαιτώ("κόμβος: δοκιμή");
Ακολουθεί ένα παράδειγμα μιας απλής δοκιμής με τη χρήση της ενότητας δοκιμαστικού δρομέα:
δοκιμή("Ελέγξτε αν οι χορδές είναι ίδιες", (t) => {
assert.strictEqual("δοκιμή", "δοκιμή");
});
Τα αποτελέσματα της δοκιμής που εμφανίζονται από τον δρομέα δοκιμής θα εμφανίζονται TAP (Test Anything Protocol) μορφή. Λάβετε υπόψη ότι αυτή η δυνατότητα είναι ακόμα πειραματική και ενδέχεται να αλλάξει ανά πάσα στιγμή.
4. Άλλες αναβαθμίσεις και διορθώσεις
Η ενημέρωση Node v18 διαθέτει επίσης μια ενημέρωση του κινητήρα v8 στην έκδοση 10.1. Η μηχανή v8 είναι ο χρόνος εκτέλεσης JavaScript που χρησιμοποιείται από το NodeJS για την εκτέλεση JavaScript.
Η ενημέρωση v8 κάνει το μεθόδους συστοιχίαςfindLast και findLastIndex διατίθεται στο NodeJS και βελτιώνει την απόδοση των πεδίων κλάσεων και των μεθόδων ιδιωτικής κλάσης.
Το NodeJS εκθέτει επίσης τα ακόλουθα API σε παγκόσμιο εύρος στην αναβάθμιση Node v18:
- Αμορφη μάζα
- BrodcastChannel
Αναβάθμιση σε Node v18
Χρησιμοποιώντας το Node v18, μπορείτε να δοκιμάσετε μια ολόκληρη εφαρμογή χωρίς εξωτερικές βιβλιοθήκες, να ανακτήσετε πόρους ασύγχρονα χωρίς εξωτερικές βιβλιοθήκες και να ενεργοποιήσετε τις ροές Ιστού στον διακομιστή σας.
Ωστόσο, αξίζει να σημειωθεί ότι αυτές οι δυνατότητες εξακολουθούν να είναι πειραματικές και μπορούν να αλλάξουν ανά πάσα στιγμή. Μπορείτε να κάνετε αναβάθμιση σε NodeJS v18 χρησιμοποιώντας το επίσημος σύνδεσμος λήψης.