Node.js kan være veletableret, men overse ikke Deno, en lignende ramme fra den samme udvikler.
Node.js er en langvarig ramme, der giver dig mulighed for at skrive server-side kode i JavaScript. Oprindeligt udgivet i 2009, har rammeværket oplevet en betydelig vækst og en eksplosion i brugen i de seneste år.
Deno har forskelle i formateringsstil, importsyntaks og pakkehåndtering, men den samme ingeniør byggede disse konkurrerende rammer på den samme motor.
I dag har Deno eksisteret længe nok til at tjene en plads i stakkene hos mange udviklere. Hvis du søger at starte et nyt JavaScript-projekt, kan du finde dig selv i tvivl om, hvad der er det rigtige valg.
Node og Deno funktioner
Næsten ni år efter udgivelsen af Node annoncerede dets udvikler, Ryan Dahl, et nyt projekt: Deno. Hvor Node engang var den eneste mulighed for server-side JavaScript, har Deno givet os et alternativ.
Node.js og Deno ligner hinanden på mange måder. Størstedelen af forskellene mellem de to opstår under hætten. Hvor Node kører på V8 JavaScript-motoren, kører Deno over toppen af en specialskrevet motor bygget i Rust med et stærkt fokus på ydeevne.
De fleste af de store forskelle mellem de to er baseret på hvilke funktioner hvert sprog understøtter. Moduler, linting, maskinskrift og pakkehåndtering håndteres alle meget forskelligt mellem de to.
Modulimport: CommonJS vs. ES
Node.js bruger CommonJS-moduler som standard med require()-syntaksen. Node giver dig mulighed for at ændre dette ved at ændre dine konfigurationsfiler til at bruge ECMAScript-moduler med import()-syntaksen i stedet, hvis de ønsker det.
// Dette er en gyldig CommonJS-modulimport i Node.js
var _ = kræve("lodash");
// Dette er en gyldig ECMAScript-modulimport i Node.js
importere _ fra'lodash';
Der er en vis begrænset interoperabilitet mellem de to typer ES-modulindlæsning, hvor nogle ECMAScript-moduler er i stand til at inkludere ved hjælp af require()-syntaksen. Hver importtype håndterer moduler lidt forskelligt, men begge vil fungere i de fleste tilfælde.
Dette giver dig mulighed for at vælge din foretrukne metode til at inkludere eksterne moduler, når du opretter et projekt.
Deno har en anden tilgang, når det kommer til at inkludere eksterne moduler i et projekt. Deno bruger include()-syntaksen for alle moduler, men i modsætning til Nodes import, kan moduler importeret i Deno komme fra ethvert sted. Disse placeringer kan endda omfatte fjernnetværk til levering af indhold (CDN'er).
// Dette er en gyldig importerklæring i Deno
importere" https://deno.land/x/[email protected]/dist/lodash.js";
Dette giver dig mulighed for at importere afhængigheder fra ethvert sted, lokalt eller fjernt, hvilket giver langt større fleksibilitet. Hvis du foretrækker at arbejde med den traditionelle require-syntaks fra Node.js, kan du skrive din egen polyfill require-funktion i Deno som en løsning.
Understøttelse af TypeScript-kode
TypeScript har oplevet stigende popularitet i løbet af de sidste par år, uden tegn på at blive langsommere. At bringe typesikker kodedynamik til JavaScript har vist sig at være en vildt succesfuld bestræbelse.
I dag er opsætning af et nyt TypeScript-projekt eller konvertering af et eksisterende Node.js-projekt til TypeScript enkelt, om end noget tidskrævende.
Tilføjelse af TypeScript-understøttelse er blevet populært nok til, at de fleste moderne rammer nu har en form for TypeScript-understøttelse. Angular førte an, med klar TypeScript-understøttelse. I dag endda React har metoder til at konfigurere TypeScript-understøttelse.
Deno er designet med TypeScript-understøttelse inkluderet for at hjælpe med at forbedre din produktivitet. Med out-of-the-box TypeScript-understøttelse mangler Deno selv den minimale opsætning, der kræves af Node.js for at udvikle maskinskrevet JavaScript-kode.
Hvis du har en kærlighed til TypeScript, kan du komme i gang hurtigt og nemt med Denos support, men du kan opleve, at du mangler nogle af standard Node.js-bibliotekerne. Mens Deno tilbyder en hurtigere opsætning, kan manglen på et udviklet økosystem hæmme dig i din byggeproces.
Linting for at generere renere kode
Node.js har et bredt udvalg af linters, som du kan vælge imellem. Der er masser af veludviklede muligheder, som du hurtigt og nemt kan installere og konfigurere. Meget ligesom tilfældet med TypeScript, skal du dog gøre en lille smule benarbejde for at komme i gang med deres foretrukne linter.
Deno tog en lidt anden vej i kodeformatering, idet den kom med sin egen indbyggede linting-løsning til .js-, .ts- og .md-filer. Hvis du kører kommandoen "deno fmt", formateres alle filer i den aktuelle arbejdsmappe automatisk.
Hvis du ikke er fan af standard linter, er der mulighed for at installere og køre dit valgte formateringssystem, ligesom du ville med Node. Det er nemt at skifte systemer, da Denos linter kører via en ekstern kommando og ikke som en del af standard build-pipeline.
Hvis du overvejer at udskifte Denos linter med et nyt system, bør du være opmærksom på potentielle kompatibilitetsproblemer og have dem i tankerne. De fleste JavaScript linters vil kræve en installation af Node for at køre, selvom det ikke er systemet, som projektet, der formateres, kører på.
Pakkestyring
Node Package Manager (npm) er meget kendt blandt moderne udviklere. Med udgangspunkt i succesen med lignende systemer som Pythons Pip og Ruby's RubyGems vandt npm hurtigt popularitet.
Vedvarende bekymringer fører til udvikling af konkurrerende ledere, såsom pNPm og Yarn. Der er nogle situationer, hvor du måske endda vælger at installere og bruge flere pakkeadministratorer med Node.
I dag, hvis du vælger at udvikle i Node.js, er du noget forkælet med valgmuligheder, når det kommer til pakkehåndtering. Node kan prale af et blomstrende økosystem med masser af muligheder for pakker at installere. Der er i øjeblikket over 1,3 millioner i npm-hovedregistret.
Npm lader dig udgive dine egne pakker, hvilket fører til et svimlende stort bibliotek.
Deno tog en helt anden tilgang til pakkehåndtering. Det hverken har eller kræver et pakkehåndteringssystem. I stedet tillader Deno direkte import af eksterne biblioteker fra ikke kun udviklerens system, men enhver lokation, der accepterer HTTP-anmodninger.
Dette giver dig mulighed for at importere biblioteker fra Denos repository, eller et hvilket som helst CDN online, direkte fra deres kodebase.
Denos officielle pakkeregister er ikke så fuldt udviklet som Nodes, takket være Nodes næsten ni år lange forspring. Evnen til at importere biblioteker fra hvor som helst forhindrer dig i at lide konsekvenserne af et økosystem, der endnu ikke har haft en chance for at vokse til fuld størrelse.
Samfundsinddragelse i Node og Deno
Node, som oprindeligt blev udgivet i 2009 af Ryan Dahl, har haft masser af tid til, at udviklersamfundet kan blive involveret. Med masser af tidlige brugere og et betydeligt bibliotek af pakker gemt i dets officielle lager og til din rådighed, har offentligheden haft masser af indflydelse på Node.js’ vækst.
Selve platformen er fuldstændig open source, vedligeholdt af OpenJS Foundation og mange bidragydere.
Deno udkom i 2018, næsten 9 år efter Node. Det blev primært udviklet af Ryan Dahl for at imødekomme bekymringer og beklagelser, han havde med sin implementering af Node. I dag er Deno også open source under MIT-licensen.
Med masser af bidragydere og sit eget voksende lager har Deno set masser af interesse fra fællesskabet.
De to rammers præstationsbekymringer
For kodere, der er interesseret i de relative ydelsesforskelle mellem de to rammer, er der lille forskel mellem de to. Denos tilpassede motor skrevet i Rust overlejrer en kerneramme, der stadig er V8-motoren. I sidste ende er både Deno og Node sammenlignelige i næsten alle tilfælde ydelsesmæssigt.
Dette ser ud til at være tilfældet, uanset om den resulterende kode kører på serveren eller klienten. Da præstationsudbyttet ikke tager højde for beslutningen, kan du frit vælge den ramme, som du føler dig bedst tilpas med.
Ryan Dahl, skaberen af begge rammer, tilbød en række forskellige årsager til sin skabelse af Deno. Selvom han nævnte flere faktorer, fra at undlade at inkorporere løfter korrekt i mange API'er til hans valgte byggesystem, var ydeevne ikke en del af processen.
Node vs Deno: Hvilket er det rigtige valg?
Under motorhjelmen er både Node.js og Deno bemærkelsesværdigt ens rammer. Begge udfører JavaScript ved hjælp af V8-motoren med lignende ydeevne og kapaciteter. Selvom der er nogle forskelle i syntaks, pakkehåndtering og indbygget support, er dit valg af, hvad du vil bruge, i høj grad baseret på dine præferencer.
Node kan prale af et svimlende stort økosystem, men Deno giver dig mulighed for at trække dine afhængigheder fra enhver kilde. I sidste ende bliver du nødt til at se nærmere på din egen udviklingsstil og bestemme, hvilken platform der passer bedst til dig.