Versjon 22 av Node.js er lansert, og med det en masse små og store nyheter.
For de som ikke er helt inne i hvordan versjonssystemet i Node.js fungerer, så er det slik at partallsversjoner – som 20 og 22 – er de versjonene som blir Long Term Support (LTS)-versjoner.
Dette er stabile versjoner som vedlikeholdes og supporteres i en lenger periode enn den vanlige versjonen. Altså de versjonene som anbefales å bruke i produksjon.
Node 22 looks amazing!
— Justin Fagnani (@justinfagnani) April 24, 2024
* Promise.withResolvers(), Set methods, Array.fromAsync(), and iteration helpers let me delete a lot of utility code.
* node --run is 6x faster than npm run?
* require(esm)
* globs
Wow 🤩https://t.co/KrrzgMHyEw
Node.js 22 er i første omgang nå ment for testformål, før den vil få LTS-status i oktober 2024.
De største nyhetene
Dette er noen av de største nyhetene i Node.js 22:
- JavaScript-motoren V8 er oppdatert til versjon 12.4.
- Støtte for å bruke require() til å laste ESM-moduler er nå aktivert gjennom et eksperimentelt flagg. Dette skal være et steg på veien mot å fikse kompatibilitetsproblemer mellom modulformatet CommonJS og ESM (EcmaScript Modules). I fremtiden vil denne støtten være skrudd på som standard, slik at de som skriver npm-pakker kan publisere "ESM-only"-pakker og likevel beholde støtte for CJS-brukere, samt hjelpe økosystemet med å migrere over til ESM.
- Lagt til WebSocket-klient.
- node --watch er nå stabilt. Det betyr at du kan starte en node-server og så vil den laste på nytt automatisk når det oppdages en endring i en fil. Dette har vært eksperimentelt fra versjon 18.11.0.
- Økt standard "highWaterMark for streams". Litt kryptisk, men oppsummert skal det ifølge OpenJS Foundation bety bedre ytelse, men med litt høyere minnebruk.
Du finner hele endringsloggen her.
Dropp npm run
En kanskje ikke superviktig nyhet, men likevel noe som kan være nyttig i noen tilfeller, er at Node.js nå kan kjøre package.json-script direkte.
Node.js 22 har nemlig fått en ny eksperimentell funksjon som lar deg kjøre script du har definert i package.json på denne måten:
node --run
I stedet for å skrive npm run dev kan du nå altså skrive node --run dev.
Med mindre du har laget noen lure aliaser så sparer du altså ikke noe på antall tegn du må skrive inn, snarere tvert imot.
Poenget er at ytelsen skal være mye bedre. Ifølge tester fra utvikleren som har bidratt med denne funksjonen til Node.js skal node --run kjøre script rundt seks ganger raskere enn npm run:
❯ hyperfine './out/Release/node run test' 'npm run test' -i
Benchmark 1: ./out/Release/node run test
Time (mean ± σ): 29.3 ms ± 1.1 ms [User: 23.2 ms, System: 3.1 ms]
Range (min … max): 27.6 ms … 33.2 ms 97 runs
Warning: Ignoring non-zero exit code.
Benchmark 2: npm run test
Time (mean ± σ): 185.7 ms ± 9.2 ms [User: 136.7 ms, System: 30.3 ms]
Range (min … max): 174.7 ms … 212.9 ms 15 runs
Warning: Ignoring non-zero exit code.
Summary
./out/Release/node run test ran
6.34 ± 0.40 times faster than npm run test
Så spørs det hvor mye det har å si i praksis.
Eller kanskje pnpm run er enda raskere? Vi har ikke testet – men her kan du lese om pnpm, pakkehåndtereren alle bør bytte til: