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).
Node 20 allows you to compile your app into a single executable along with the entire Node.js core so you can run your apps on systems where node isn't installed, or your don't trust the system version. pic.twitter.com/yax6OWNZbO
— Wes Bos (@wesbos) April 18, 2023
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.
- Du bør ha svært gode grunner, om du ikke vil deploye til skyen
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.
Node is experimenting with a permissions model, which will be really nice to lock down access to specific folders.
— Wes Bos (@wesbos) April 18, 2023
The API is a bit clumsy, and doesn't support relative paths via the CLI.
Hope it will improve, as Deno's prompt UI is much nicer pic.twitter.com/3X0VgbLqS8
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.