Node.js 15 wydany z najnowszym V8 i npm
Październik dostarczył wiele stabilnych wersji narzędzi oraz środowisk. Do tego grona dołącza Node.js 15, wieloplatformowe środowisko uruchomieniowe do tworzenia aplikacji w języku JS. Twórcy planują kolejne aktualizacje wydania mniej więcej co dwa tygodnie.
Wśród nowości dostarczonych do Node.js jest obsługa npm 7, silnika V8 8.6, a także implementacja AbortController.
Implementacja AbortController w Node.js 15
Ta implementacja znajduje się na razie w fazie eksperymentalnej. Jest to klasa narzędziowa do anulowania sygnału w wybranych interfejsach API opartych na Promise. AbortController opiera się na internetowym interfejsie API Abort Controller.
const ac = new AbortController(); ac.signal.addEventListener('abort', () => console.log('Aborted!'), { once: true }); ac.abort(); console.log(ac.signal.aborted); // Prints True
W powyższym przykładzie zdarzenie abort jest emitowane po wywołaniu ac.abort(). Implementacja AbortController tylko raz wywoła zdarzenie abort. Aby upewnić się, że obserwator zdarzeń będzie usunięty po zdarzeniu abort, EventListener powinien korzystać z opcji { once: true }.
QUIC – kolejny eksperyment
Kolejna funkcja w fazie eksperymentalnej to nowy protokół transportowy oparty na UDP – QUIC. Jest on podstawowym protokołem transportowym dla HTTP/3. Ponadto QUIC ma wbudowane zabezpieczenia z TLS 1.3 oraz korekcję błędów i kontrolę przepływu. Obsługę QUIC włącza się, kompilując Node.js z flagą –experimental-quic.
Najnowszy menedżer pakietów npm
Przede wszystkim do Node dodano obsługę najnowszej wersji menedżera pakietów JS – npm 7. Npm ma wiele nowości, m.in. długo oczekiwane workspaces, a także format package-lock.json. Obsługuje on również pliki yarn.lock. Z kolei zależności peer są domyślnie instalowane.
Silnik V8 w Node.js 15
Wcześniejsza wersja Node obsługuje silnik V8 w wersji 8.4. Najnowsze wydanie środowiska otrzymało jednak obsługę nowszego wydania – V8 8.6. Node zyskuje dzięki temu poprawki wydajności oraz następujące funkcje:
- AggregateError
- Promise.any()
- prototype.replaceAll()
- Logiczne operatory przypisania &&=, ||= i ??=
Nieobsłużone odrzucenia
Jedną z ostatnich zmian jest modyfikacja trybu dla unhandledRejection z warn na throw. Jeśli nie ustawiono punktu zaczepienia unhandledRejection, to zgłasza się go jako nieprzechwycony wyjątek. Dzięki temu ulepszeniu uproszczono widok odrzuceń, a co za tym idzie – łatwiej odnajduje się i debuguje problemy.
Podsumowanie
Do wdrożeń produkcyjnych zaleca się korzystanie z wersji LTS (wsparcie długoterminowe). Niedługo do tej fazy zostanie przeniesiona wcześniejsza wersja – Node.js 14. Zgodnie z zasadami twórców, „piętnastka” jako wydanie o nieparzystym numerze, nie otrzyma statusu LTS.