In april 2022 werd NodeJS-release Node v18 uitgegeven. De Node v18-update is een van de meest verwachte updates sinds Node v14, die asynchrone lokale opslag-API, een Web Assembly System Interface (WASI) en ondersteuning voor ECMAScript-modules heeft toegevoegd.

De v18-upgrade voegt verschillende verbeteringen toe aan NodeJS, waaronder een wereldwijd ingeschakelde fetch-API standaard, webstream-API-ondersteuning en een kerntestrunner-module. Hier behandelen we de meeste belangrijke wijzigingen in NodeJS in v18.

1. De Fetch-API

De fetch-API biedt een interface voor het openen en manipuleren van HTTP-verzoeken en -antwoorden. Vóór NodeJS v18 waren voor HTTP-verzoeken met NodeJS bibliotheken van derden vereist, zoals: axios en node-fetch of de ingewikkelde http of https pakket.

NodeJS v18 maakt de fetch-API standaard beschikbaar in het globale bereik. De globale ophaal-API elimineert de noodzaak voor bibliotheken van derden zoals axios en de uitgebreide code die is gekoppeld aan de https pakket bij het ophalen van bronnen asynchroon via een netwerk.

Hier is een voorbeeld van het gebruik van de API:

const getData = asynchronefunctie () {
proberen {
const res = wachten ophalen("https://example.com/users");
const gegevens = wachten res.json();
troosten.log (gegevens);
} vangst (fout) {
troosten.log(`Er is iets misgegaan, ${fout}`);
}
};
gegevens verkrijgen();

De gegevens verkrijgen functie hierboven stuurt een KRIJGEN verzoek om de bronnen op te halen van " https://example.com/users". De fetch-API heeft ook een optionele tweede parameter, een options-object. De optie-objecten moeten details over de aanvraag bevatten. Bijvoorbeeld:

const gebruikersgegevens = {
naam: "Jon Sneeuw",
leeftijd: 25,
geslacht: "M",
};
const postData = asynchronefunctie (gegevens) {
proberen {
const res = wachten ophalen("https://voorbeeld.com/gebruikers", {
methode: "NA",
lichaam: JSON.stringify (gegevens),
});
const responseData = wachten res.json();
troosten.log(
`Het verzoek was succesvol, hier zijn de details: ${responseData}`
);
} vangst (fout) {
troosten.log(`Het verzoek was niet succesvol. Hier zijn de details: ${fout}`);
}
};
postData (gebruikersgegevens);

Hoewel de fetch-API nog steeds is experimenteel, zou het voor de meeste gebruikers goed moeten werken.

2. Ondersteuning voor Web Streams API

Denk aan multimedia of realtime toepassingen; dit is een kerngebruiksscenario van de webstreams-API. De webstreams-API is een set interfaces die de programmatische opsplitsing van een grote bron die via een netwerk wordt ontvangen in kleine stukjes mogelijk maakt en deze vervolgens beetje bij beetje verwerkt.

Een voorbeeld van een stream is de antwoordtekst die wordt geretourneerd door een succesvolle ophalen verzoek. De antwoordtekst is van het type ReadableStream.

NodeJS v18 onthult een experimenteel implementatie van de webstreams-API. Met deze update zijn webstream-API's nu beschikbaar in zowel de client als de server, waardoor de ontwikkeling eenvoudiger wordt.

U vindt een lijst met de momenteel ondersteunde streams in de officiële release-opmerkingen.

3. De Test Runner-module

In eerdere versies van NodeJS werden testen zonder bibliotheken van derden gedaan met de ingebouwde beweren bibliotheek.

De beweren bibliotheek maakte het gemakkelijk om eenvoudige tests te schrijven, maar het had aanzienlijke beperkingen die het moeilijk maakten om met meerdere testsuites te werken. Deze beperkingen zorgden ervoor dat bibliotheken van derden, zoals Jest, meer geavanceerde tests moesten uitvoeren.

NodeJS v18 elimineert de noodzaak voor bibliotheken van derden met de introductie van NodeJS's eigen kerntestrunner-module. De testrunner ondersteunt functies zoals subtests, het overslaan van tests, callback-tests, enz., Net als Jest.

Om de testrunner te gebruiken, moet u importeren beweren van beweren en testen van knoop: test. Let op de "knooppunt:" voorvoegsel; het is het nieuwe protocol van Node dat knooppuntkernpakketten onderscheidt van door de gebruiker gemaakte pakketten.

constbeweren = vereisen("beweren");
const testen = vereisen("knooppunt: test");

Hier is een voorbeeld van een eenvoudige test met behulp van de testrunner-module:

testen("Controleer of strings hetzelfde zijn", (t) => {
assert.strictEqual("testen", "testen");
});

De testresultaten die door de testloper worden weergegeven, worden weergegeven TAP (Test Anything-protocol) formaat. Houd er rekening mee dat deze functie nog experimenteel is en op elk moment kan veranderen.

4. Andere upgrades en oplossingen

De Node v18-update bevat ook een update van de v8-engine naar versie 10.1. De v8-engine is de JavaScript-runtime die door NodeJS wordt gebruikt om JavaScript uit te voeren.

De v8-update maakt de matrixmethodenvindLaatste en zoekLaatsteIndex beschikbaar in NodeJS en verbetert de prestaties van klassenvelden en privéklasse-methoden.

NodeJS onthult ook de volgende API's op het globale bereik in de Node v18-upgrade:

  • Blob
  • BrodcastKanaal

Upgraden naar Node v18

Met Node v18 kun je een hele applicatie testen zonder externe bibliotheken, bronnen asynchroon ophalen zonder externe bibliotheken en webstreams inschakelen op je server.

Het is echter vermeldenswaard dat deze functies nog steeds experimenteel zijn en op elk moment kunnen veranderen. U kunt upgraden naar NodeJS v18 met behulp van de officiële downloadlink.