«Hello, World» blir 86 MB - nye Node.js lar deg kjøre Node uten Node

Her er de viktigste nyhetene i Node.js 20.

Node.js er ute i versjon 20. 📸: Ole Petter Baugerød Stokke
Node.js er ute i versjon 20. 📸: Ole Petter Baugerød Stokke Vis mer

Versjon 20 av JavaScript-kjøremiljøet Node.js ble lansert tirsdag denne uken, og denne gangen er det ikke snakk om noen liten oppgradering.

Blant de mange nyhetene finner vi blant annet en ny "permission model", oppdatering av den innebygde V8 JavaScript-motoren, samt mulighet til å kjøre Node-applikasjoner på systemer som ikke har Node.js installert.

OpenJS Foundation oppsummerer dette som de viktigste nyhetene:

  • Eksperimentell "Permission Model"
  • Synkron import.meta.resolve()
  • Stabil Test Runner
  • V8 JavaScript-motor oppdatert til 11.3, med 5 nye funksjoner
  • Single Executable Apps gjør det mulig å distriburere Node.js-apper til systemer uten Node.js installert
  • Ada versjon 2.0

Kompilér til frittstående app

En av de kanskje mest spennende nye funksjonene, som riktignok fortsatt er på eksperimentstadiet, er at Node.JS 20 lar deg kompilere appen din til én kjørbar binærfil ("Single Executable Applications" – SEA).

Det betyr at hele Node.js-kjernen følger med i binærfilen. Dermed kan du kjøre appen din på systemer der Node.js ikke er installert.

Dette er noe du også kan gjøre i nye konkurrerende kjøremiljøer som Deno.

Ifølge et Twitter-innlegg fra Wes Bos blir den ferdige binærfilen nesten nøyaktig like stor enten du bruker Node.js 20 eller Deno, noe som antagelig kommer av at begge bruker JavaScript-motoren V8. Denne tar nok mye plass, ettersom en enkel "Hello, World"-applikasjon ender opp på hele 85,8 megabyte.

Styr tillatelser

En annen eksperimentell funksjon i Node.js 20 er en "permission model" – en mekanisme for å begrense hvilke ressurser en Node-app skal ha tilgang til når den kjører.

Ved å starte Node.js med flagget --experimental-permission vil du få mulighet til å begrense lese- eller skrivetilgang til filsystemet. For eksempel kan du gjøre dette for å gi skrivetilgang kun til /tmp-mappen:

node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js

Du kan også begrense mulightene til å opprette nye prosesser med --allow-child-process eller workers med --allow-worker.

Denne typen tilgangsstyring er også noe du har i Deno, og som Node.js-gjengen har jobbet med en stund for å få plass også i Node. En roadmap for prosjektet er tilgjengelig her, der de også ønsker innspill.

Oppdatert JavaScript-motor

Node.js er bygget på JavaScript-motoren V8, den samme som brukes i Google Chrome og andre Chromium-baserte nettlesere.

Med Node.js 20 oppdateres V8 til versjon 11.3. I tillegg til bedre ytelse, gjør det også at Node.js får støtte for en del ny JavaScript-funksjonalitet, som for eksempel String.prototype.isWellFormed() for å sjekke om en tekststreng har korrekt UTF-16-enkoding.

«Hvis du allerede bruker Node.js, er Node.js 20 en utmerket måte for å ta en nærmere kikk på nye funksjoner før LTS kommer ut.»

Node.js 20 vil være det som kalles "Current"-versjonen i seks måneder, og så vil den gå over til å bli "LTS" – long-term-support – i oktober.

"Fra sikkerhet til testing til portabilitet – Node.js har gjort viktige fremskritt det siste året, og Node.js 20 viser dette. Hvis du allerede bruker Node.js, er Node.js 20 en utmerket måte for å ta en nærmere kikk på nye funksjoner før LTS kommer ut", skriver OpenJS Foundation-sjef Robin Ginn i et blogginnlegg.

Du kan laste den ned herfra, eller hvis du bruker nvm kan du installere den med nvm install 20.