Ce este nou în Node.js v20 (Test Runner, Permission Model, SEA, V8 JS Engine 11.3)
Publicat: 2023-04-28Node.js v20 este acum disponibil! Pe 18 aprilie 2023, a fost făcută publică și acum poate fi folosită de toată lumea. Cu această ediție, Node.js ar trebui să fie mult mai sigur și să aibă performanțe mai bune.
Este important de știut - deoarece aceasta este o versiune cu număr par, este programată să devină o versiune de suport pe termen lung (LTS) în octombrie 2023 și va fi susținută până în aprilie 2026. Cu toate acestea, echipa Node.js caută în mod activ comunitate feedback pentru a identifica și a remedia orice probleme înainte de a fi promovat la LTS.
Această nouă lansare a Node.js aduce actualizări interesante și caracteristici pe care dezvoltatorii le vor aprecia cu siguranță, cum ar fi modelul de permisiuni experimental, import.meta.resolve
sincron, un rulant de testare stabil, actualizează motorul JavaScript V8 la versiunea 11.3, aducând îmbunătățiri de performanță și erori. remedieri și multe altele.
În acest articol, veți explora modificările introduse în Node.js v20, oferind o privire în profunzime asupra noilor sale caracteristici și capabilități.
Noțiuni introductive cu Node.js v20
Instalarea Node.js v20 este destul de similară cu alte versiuni de Node.js. Tot ce trebuie să faci este:
- Descărcați pachetul de instalare de pe site-ul web oficial Node.js.
- După ce ați descărcat programul de instalare, rulați-l și urmați instrucțiunile pentru a finaliza procesul de instalare. Acest proces este destul de simplu și trebuie doar să fiți de acord cu acordul de licență și să faceți clic pe butonul „Următorul”.
- Reporniți sistemul/mașina după finalizarea procesului de instalare, pentru a vă asigura că toate modificările au efecte.
- Verificați instalarea Node.js rulând următoarea comandă:
node -v
Dacă vedeți numărul versiunii (v20.0.0), înseamnă că Node.js este instalat corect și sunteți gata să începeți să lucrați cu Node.js v20.
Ce este nou în Node.js v20?
Să explorăm cele 5 actualizări majore introduse cu această lansare Node.js. Aceste caracteristici includ:
Modelul de permisiuni experimentale
Introducerea modelului experimental de permisiuni în Node.js v20 este un plus semnificativ care oferă dezvoltatorilor mai mult control asupra accesului la resurse specifice în timpul execuției.
Această nouă caracteristică este benefică atunci când securitatea și utilizarea resurselor sunt critice, cum ar fi într-un mediu de producție.
Modelul de permisiuni vine cu mai multe abilități, inclusiv restricționarea accesului la sistemul de fișiere, child_process, worker_threads și suplimente native.
Dezvoltatorii pot folosi semnalizatoare precum --allow-fs-read
, --allow-fs-write
și --allow-child-process
pentru a specifica ce resurse sunt accesibile. Pentru a activa aceste steaguri, dezvoltatorii trebuie să utilizeze steagul --experimental-permission
în combinație cu permisiunile necesare.
Iată un exemplu de utilizare a modelului de permisiuni pentru a permite accesul de citire și scriere la întregul sistem de fișiere:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Dezvoltatorii pot folosi, de asemenea, modelul de permisiuni pentru a specifica accesul la anumite foldere și fișiere. De exemplu, următoarea comandă permite accesul de scriere la folderul /tmp/ :
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
Un beneficiu semnificativ al modelului de permisiuni este capacitatea de a exercita un control mai granular asupra accesului sistemului de fișiere. De exemplu, dezvoltatorii pot specifica căi și modele wildcard pentru a permite accesul la anumite foldere sau fișiere.
$ node --experimental-permission --allow-fs-read=/home/user/* index.js
Comanda de mai sus oferă acces de citire la toate folderele din directorul /home/user/ .
Proprietatea de permisiune a obiectului proces poate fi folosită și pentru a verifica dacă o anumită permisiune a fost acordată în timpul execuției. De exemplu, dacă doriți să verificați dacă procesul dvs. Node.js are acces de citire la un anumit folder, /home/user/documents , puteți utiliza următorul cod:
if (process.permission.has('fs.read', '/home/user/documents')) { console.log('Read access granted to /home/user/documents'); } else { console.log('Read access not granted to /home/user/documents'); }
Folosind modelul de permisiuni, aveți un control mai precis asupra accesului la sistemul de fișiere al proceselor dvs. Node.js, ceea ce poate duce la o securitate mai bună și la o utilizare mai eficientă a resurselor.
Este esențial să rețineți că modelul de permisiuni este încă experimental și se poate modifica în versiunile viitoare ale Node.js. Este recomandabil să fiți la curent cu documentația Modelului de permisiuni și să fiți precaut atunci când utilizați aceste funcții experimentale.
Runner de testare stabil
Node.js v20 include o versiune stabilă a modulului test_runner care permite dezvoltatorilor să construiască și să ruleze suite de testare JavaScript rapid și ușor, fără a instala dependențe suplimentare.
Runnerul de testare stabil include acum mai multe blocuri de construcție, cum ar fi describe
, it
/ test
și cârlige, pentru crearea și structurarea fișierelor de testare, împreună cu batjocura, modul de urmărire și capacitatea de a rula mai multe fișiere de testare în paralel folosind node --test
comanda node --test
.
Iată un exemplu de utilizare a testului:
import { test, mock } from 'node:test'; import assert from 'node:assert'; import fs from 'node:fs'; mock.method(fs, 'readFile', async () => "Hello World"); test('synchronous passing test', async (t) => { // This test passes because it does not throw an exception. assert.strictEqual(await fs.readFile('a.txt'), "Hello World"); });
Runnerul de testare oferă reporteri de testare configurabili și personalizați prin indicatorul --test-reporter
, acoperire a testelor experimentale prin indicatorul --experimental-test-coverage
și capabilități de batjocură.
Deși nu este destinat să înlocuiască cadrele de testare cu funcții complete precum Jest sau Mocha, testul stabil oferă o modalitate simplă și rapidă de a crea suite de testare. A fost îmbunătățit semnificativ de la introducerea sa în Node.js v19 și, datorită testării și feedback-ului utilizatorilor finali, a fost acum marcat ca stabil în Node.js v20.
Mai multe informații pot fi găsite în această solicitare de extragere îmbinată.
Motorul JavaScript V8 Actualizat la 11.3
Motorul JavaScript V8, care alimentează Node.js, a fost actualizat la versiunea 11.3 în Node.js v20. Acest lucru aduce performanțe îmbunătățite și introduce noi funcții de limbă. Unele dintre noile funcții pe care această actualizare include:
-
String.prototype.isWellFormed
șitoWellFormed
: Aceste metode sunt deosebit de utile pentru asigurarea unui format adecvat de șir. Acest lucru vă ajută să vă asigurați că introducerea șirului de caractere de către utilizator este în formatul corect UTF-16, reducând erorile în epoca emoji-urilor. - Metode care modifică Array și TypedArray după copie: Acest lucru poate fi util pentru crearea de copii modificate ale matricelor fără a afecta datele originale, ceea ce este relevant în special în cazurile în care trebuie să păstrați datele originale pentru comparare sau alte scopuri.
-
ArrayBuffer
redimensionabil șiSharedArrayBuffer
extensibil: oferă o flexibilitate mai mare, permițând o alocare mai eficientă a memoriei. - RegExp v steag cu notație setată și proprietăți ale șirurilor de caractere: adaugă funcționalitate pentru expresiile regulate.
- WebAssembly tail call: oferă o modalitate de a optimiza anumite tipuri de apeluri de funcții.
Aceste actualizări arată angajamentul continuu al comunității de dezvoltare Node.js pentru îmbunătățirea performanței și funcționalității.
import.meta.resolve() sincron
În Node.js v20, import.meta.resolve()
a fost introdus, ceea ce face mai ușor să scrieți scripturi care nu sunt sensibile la locație. Această funcție revine sincron, similar comportamentului browserului, permițând o execuție mai eficientă.
Cârligele de rezolvare a încărcării utilizatorului pot fi în continuare definite ca o funcție asincronă, dar import.meta.resolve()
va reveni în continuare sincron pentru codul aplicației, chiar dacă sunt încărcate cârligele de rezolvare asincrone.
Comportamentul sincron al import.meta.resolve()
permite o execuție mai eficientă a codului, mai ales atunci când se ocupă cu cantități mari de date. În calitate de autor, puteți defini cârligele de rezolvare ca funcții asincrone sau de sincronizare, în funcție de preferințele dvs. Codul aplicației se va executa în continuare sincron, indiferent dacă sunt încărcate cârlige de rezolvare asincrone.
Aplicații experimentale unice executabile (SEA)
Experimental Single Executable Applications (SEA) este o nouă caracteristică introdusă în Node.js v20, care permite gruparea aplicației dvs. cu binarul Node.js, permițând utilizatorilor finali să o distribuie și să o ruleze ca un singur fișier executabil.
Aceasta a fost o cerere de lungă durată din partea comunității, iar echipa a perfecționat abordarea în ultimul an.
În Node.js v20, construirea unei singure aplicații executabile necesită injectarea unui blob pregătit de Node.js dintr-o configurație JSON, mai degrabă decât injectarea fișierului JS brut.
Un blob este un fișier care conține date binare, în acest caz, pregătite de Node.js, și este injectat în binar. Această modificare a fost făcută pentru a permite încorporarea mai multor resurse coexistente în SEA, ceea ce deschide noi cazuri de utilizare.
Iată un exemplu de fișier sea-config.jso n:
{ "main": "myscript.js", "output": "sea-prep.blob" }
Când este executat cu node --experimental-sea-config sea-config.json
, blob-ul este scris în fișierul sea-prep.blob , care poate fi apoi injectat în binar.
Caracteristica SEA permite dezvoltatorilor să distribuie aplicații Node.js fără a solicita utilizatorilor să instaleze Node.js. Funcționalitatea a fost creată de Darshan Sen, care a câștigat premiul pentru Contribuția remarcabilă dintr-o nouă sosire ca parte a premiilor JavaScriptLandia la OpenJS World.
Microsoft, un membru OpenJS Foundation, investighează această caracteristică ca o modalitate de a reduce atacurile vectoriale și de a împuternici arhitectura Node.js pentru o experiență mai bună. Deși caracteristica SEA este încă experimentală, reprezintă o nouă dezvoltare interesantă pentru comunitatea Node.js.
Performanţă
Node.js v20 vine cu îmbunătățiri semnificative ale duratei sale de execuție, cu un accent reînnoit pe performanță de către noua echipă de performanță Node.js. Îmbunătățirile includ optimizări ale părților principale ale runtime, cum ar fi URL, fetch()
și EventTarget
.
Una dintre îmbunătățirile notabile este reducerea costului inițializării EventTarget
, care a fost redus la jumătate, rezultând un acces mai rapid la toate subsistemele care îl folosesc. În plus, apelurile V8 Fast API au fost utilizate pentru a îmbunătăți performanța în API-uri precum URL.canParse()
și cronometre.
O altă modificare specifică este includerea versiunii actualizate 2.0 a Ada, un parser URL rapid și compatibil cu specificațiile scris în C++.
rezumat
În acest articol, ați învățat câteva dintre caracteristicile majore (experimentale și stabile) și îmbunătățirile aduse de Node.js v20, cum ar fi îmbunătățiri aduse motorului JavaScript V8, performanță, runner de testare și introducerea modelului de permisiuni experimentale și aplicații cu execuție unică. .
Este important de știut că Node.js v14 va ajunge la sfârșitul vieții în aprilie 2023, așa că este recomandat să începeți să planificați actualizarea la Node.js v18 (LTS) sau vNode.js 20 (în curând va fi LTS).
Doriți să dați o întoarcere celei mai recente versiuni de Node.js? Puteți face asta prin implementarea aplicației dvs. Node.js pe Kinsta și primiți primii 20 USD de la noi. Acceptăm deja Node.js v20, ceea ce înseamnă că îi puteți testa noile caracteristici și capabilități începând de astăzi.
Acum e rândul tău! Ce caracteristici sau îmbunătățiri considerați cele mai interesante în Node.js v20? Există unele semnificative pe care este posibil să le fi trecut cu vederea? Spune-ne în comentarii.