Node.js 22 lar deg droppe npm run – skal være 6 ganger raskere

Her er noen av de største nyhetene i nye Node.js 22.

Nå kan du skrive node --run i stedet for npm run. Det er flere bokstaver, men skal likevel gå raskere. 📸: Kurt Lekanger
Nå kan du skrive node --run i stedet for npm run. Det er flere bokstaver, men skal likevel gå raskere. 📸: Kurt Lekanger Vis mer

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.js 22 er i første omgang nå ment for testformål, før den vil få LTS-status i oktober 2024.

I oktober 2024 blir Node.js "active"-versjonen av Node.js. 📸: Nodejs.org
I oktober 2024 blir Node.js "active"-versjonen av Node.js. 📸: Nodejs.org Vis mer

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: