Node.js kan vara väl etablerad, men glöm inte bort Deno, ett liknande ramverk från samma utvecklare.

Node.js är ett långvarigt ramverk som låter dig skriva kod på serversidan i JavaScript. Ursprungligen släpptes 2009, ramverket har sett en betydande tillväxt och en explosion i användning under de senaste åren.

Deno har skillnader i formateringsstil, importsyntax och pakethantering, men samma ingenjör byggde dessa konkurrerande ramverk på samma motor.

Idag har Deno funnits tillräckligt länge för att få en plats bland många utvecklare. Om du vill starta ett nytt JavaScript-projekt kanske du undrar vilket som är rätt val.

Nod och Deno funktioner

Nästan nio år efter lanseringen av Node tillkännagav dess utvecklare, Ryan Dahl, ett nytt projekt: Deno. Där Node en gång var det enda alternativet för server-side JavaScript, har Deno gett oss ett alternativ.

Node.js och Deno är ganska lika på många sätt. Majoriteten av skillnaderna mellan de två uppstår under huven. Där Node körs på V8 JavaScript-motorn, kör Deno över en specialskriven motor byggd i Rust med starkt fokus på prestanda.

De flesta av de stora skillnaderna mellan de två är baserade på vilka funktioner varje språk stöder. Moduler, linting, typscript och pakethantering hanteras alla ganska olika mellan de två.

Modulimport: CommonJS vs. ES

Node.js använder CommonJS-moduler som standard med require()-syntaxen. Node tillåter dig att ändra detta genom att ändra dina konfigurationsfiler för att använda ECMAScript-moduler med import()-syntaxen istället om de skulle vilja.

// Detta är en giltig CommonJS-modulimport i Node.js
var _ = behöva("lodash");

// Detta är en giltig ECMAScript-modulimport i Node.js
importera _ från'lodash';

Det finns en viss begränsad interoperabilitet mellan de två typerna av ES-modulladdning, med vissa ECMAScript-moduler som kan inkluderas med hjälp av require()-syntaxen. Varje importtyp hanterar moduler lite olika, men båda kommer att fungera i de flesta fall.

Detta gör att du kan välja din föredragna metod för att inkludera externa moduler när du skapar ett projekt.

Deno tar ett annat tillvägagångssätt när det kommer till att inkludera externa moduler i ett projekt. Deno använder syntaxen include() för alla moduler, men till skillnad från Nodes import kan moduler som importeras i Deno komma från vilken plats som helst. Dessa platser kan till och med inkludera fjärrnätverk för innehållsleverans (CDN).

// Detta är ett giltigt importmeddelande i Deno
importera" https://deno.land/x/[email protected]/dist/lodash.js";

Detta gör att du kan importera beroenden från vilken plats som helst, lokal eller fjärransluten, vilket ger mycket större flexibilitet. Om du föredrar att arbeta med den traditionella require-syntaxen från Node.js kan du skriva din egen polyfill require-funktion i Deno som en lösning.

Stöd för TypeScript-kod

TypeScript har sett ökande popularitet under de senaste åren, utan några tecken på att sakta ner när som helst snart. Att föra typsäker koddynamik till JavaScript har visat sig vara en mycket framgångsrik strävan.

Idag är det enkelt, om än något tidskrävande att sätta upp ett nytt TypeScript-projekt eller konvertera ett befintligt Node.js-projekt till TypeScript.

Att lägga till TypeScript-stöd har blivit tillräckligt populärt för att de flesta moderna ramverk nu har någon form av TypeScript-stöd. Angular ledde vägen, med standardstöd för TypeScript. Idag till och med React har metoder för att ställa in TypeScript-stöd.

Deno designades med TypeScript-stöd inkluderat för att förbättra din produktivitet. Med out-of-the-box TypeScript-stöd saknar Deno även den minimala installation som krävs av Node.js för att utveckla maskinskriven JavaScript-kod.

Om du älskar TypeScript kan du komma igång snabbt och enkelt med Denos support, men du kanske saknar några av de vanliga Node.js-biblioteken. Även om Deno erbjuder en snabbare installation, kan avsaknaden av ett utvecklat ekosystem hindra dig i din byggprocess.

Ludd för att generera renare kod

Node.js har ett brett utbud av linters som du kan välja mellan. Det finns gott om välutvecklade alternativ som du snabbt och enkelt kan installera och konfigurera. Ungefär som fallet med TypeScript, men du kommer att behöva göra lite benarbete för att komma igång med deras val.

Deno tog en något annorlunda väg i kodformatering, med sin egen inbyggda linting-lösning för .js-, .ts- och .md-filer. Om du kör kommandot "deno fmt" formateras alla filer i den aktuella arbetskatalogen automatiskt.

Om du inte är ett fan av standardlintern, finns det ett alternativ att installera och köra ditt val av formateringssystem, precis som du skulle göra med Node. Att byta system är enkelt eftersom Denos linter körs via ett externt kommando och inte som en del av standardbyggledningen.

Om du funderar på att byta ut Denos linter mot ett nytt system, bör du vara medveten om potentiella kompatibilitetsproblem och ha dem i åtanke. De flesta JavaScript-linters kräver en installation av Node för att köras, även om det inte är systemet som projektet som formateras körs på.

Pakethantering

Node package manager (npm) är mycket välkänd bland moderna utvecklare. Med utgångspunkt i framgången med liknande system som Pythons Pip och Ruby's RubyGems blev npm snabbt populärt.

Dröjande bekymmer leder till utvecklingen av konkurrerande chefer, såsom pNPm och Yarn. Det finns vissa situationer där du till och med väljer att installera och använda flera pakethanterare med Node.

Idag, om du väljer att utveckla i Node.js, är du något bortskämd med valmöjligheter när det kommer till pakethantering. Node har ett blomstrande ekosystem med många alternativ för paket att installera. Det finns för närvarande över 1,3 miljoner i npm-huvudregistret.

Npm låter dig publicera dina egna paket, vilket leder till ett svindlande stort bibliotek.

Deno tog en helt annan inställning till pakethantering. Den har varken, eller kräver, ett pakethanteringssystem. Istället tillåter Deno direkt import av externa bibliotek från inte bara utvecklarens system, utan alla platser som accepterar HTTP-förfrågningar.

Detta låter dig importera bibliotek från Denos arkiv, eller vilket CDN som helst online, direkt från deras kodbas.

Denos officiella paketregister är inte lika fullt utvecklat som Nodes, tack vare Nodes nästan nio år långa försprång. Möjligheten att importera bibliotek var som helst håller dig från att drabbas av konsekvenserna av ett ekosystem som ännu inte har haft en chans att växa till full storlek.

Samhällsengagemang i Node och Deno

Node, som ursprungligen släpptes 2009 av Ryan Dahl, har haft gott om tid för utvecklargemenskapen att engagera sig. Med massor av tidiga användare och ett stort bibliotek med paket lagrade i dess officiella arkiv och till ditt förfogande, har allmänheten haft mycket att säga till om i Node.jss tillväxt.

Plattformen i sig är helt öppen källkod, underhålls av OpenJS Foundation och många bidragsgivare.

Deno släpptes 2018, nästan 9 år efter Node. Den utvecklades huvudsakligen av Ryan Dahl för att ta itu med bekymmer och ånger han hade med sin implementering av Node. Idag är Deno även öppen källkod under MIT-licensen.

Med massor av bidragsgivare och ett växande eget lager har Deno sett ett stort intresse från samhället.

Prestandaproblem för de två ramarna

För kodare som är intresserade av de relativa prestandaskillnaderna mellan de två ramverken är det liten skillnad mellan de två. Denos skräddarsydda motor skriven i Rust överlagrar en kärnram som fortfarande är V8-motorn. I slutändan är både Deno och Node jämförbara i nästan alla fall prestandamässigt.

Detta verkar vara fallet oavsett om den resulterande koden körs på servern eller klienten. Med prestandaavkastning som inte tar hänsyn till beslutet, är du fri att välja det ramverk som du känner dig mest bekväm med.

Ryan Dahl, skaparen av båda ramverken, gav upp en mängd olika anledningar till att han skapade Deno. Även om han nämnde flera faktorer, från att inte korrekt införliva löften i många API: er till hans valda byggsystem, var prestanda inte en del av processen.

Node vs Deno: Vilket är det rätta valet?

Under huven är både Node.js och Deno anmärkningsvärt lika ramar. Båda kör JavaScript med V8-motorn med liknande prestanda och kapacitet. Även om det finns vissa skillnader i syntax, pakethantering och inbyggt stöd, är ditt val av vilken du vill använda till stor del baserat på dina preferenser.

Node har ett svindlande stort ekosystem, men Deno låter dig dra dina beroenden från vilken källa som helst. I slutändan kommer du att behöva ta en närmare titt på din egen utvecklingsstil och bestämma vilken plattform som är mer lämpad för dig.