Node.js kan være godt etablert, men ikke overse Deno, et lignende rammeverk fra samme utvikler.
Node.js er et langvarig rammeverk som lar deg skrive kode på serversiden i JavaScript. Opprinnelig utgitt i 2009, har rammeverket hatt betydelig vekst og en eksplosjon i bruk de siste årene.
Deno har forskjeller i formateringsstil, importsyntaks og pakkehåndtering, men den samme ingeniøren bygde disse konkurrerende rammeverkene på samme motor.
I dag har Deno eksistert lenge nok til å få en plass i stablene til mange utviklere. Hvis du ønsker å starte et nytt JavaScript-prosjekt, kan det hende du lurer på hva som er det riktige valget.
Node- og Deno-funksjoner
Nesten ni år etter utgivelsen av Node kunngjorde utvikleren, Ryan Dahl, et nytt prosjekt: Deno. Der Node en gang var det eneste alternativet for JavaScript på serversiden, har Deno gitt oss et alternativ.
Node.js og Deno er ganske like på mange måter. Flertallet av forskjellene mellom de to oppstår under panseret. Der Node kjører på V8 JavaScript-motoren, kjører Deno over toppen av en spesialskrevet motor bygget i Rust med sterkt fokus på ytelse.
De fleste av de store forskjellene mellom de to er basert på hvilke funksjoner hvert språk støtter. Moduler, linting, maskinskrift og pakkehåndtering håndteres alle ganske forskjellig mellom de to.
Modulimport: CommonJS vs. ES
Node.js bruker CommonJS-moduler som standard med require()-syntaksen. Node lar deg endre dette ved å endre konfigurasjonsfilene dine til å bruke ECMAScript-moduler med import()-syntaksen i stedet hvis de ønsker det.
// Dette er en gyldig CommonJS-modulimport i Node.js
var _ = krever("lodash");
// Dette er en gyldig ECMAScript-modulimport i Node.js
import _ fra'lodash';
Det er noe begrenset interoperabilitet mellom de to typene ES-modullasting, med noen ECMAScript-moduler som kan inkluderes ved å bruke require()-syntaksen. Hver importtype håndterer moduler litt forskjellig, men begge vil fungere i de fleste tilfeller.
Dette lar deg velge din foretrukne metodikk for å inkludere eksterne moduler når du oppretter et prosjekt.
Deno har en annen tilnærming når det gjelder å inkludere eksterne moduler i et prosjekt. Deno bruker include()-syntaksen for alle moduler, men i motsetning til Nodes import, kan moduler importert i Deno komme fra hvilket som helst sted. Disse stedene kan til og med inkludere eksterne innholdsleveringsnettverk (CDN).
// Dette er en gyldig importerklæring i Deno
import" https://deno.land/x/[email protected]/dist/lodash.js";
Dette lar deg importere avhengigheter fra ethvert sted, lokalt eller eksternt, og tilbyr langt større fleksibilitet. Hvis du foretrekker å jobbe med den tradisjonelle require-syntaksen fra Node.js, kan du skrive din egen polyfill require-funksjon i Deno som en løsning.
Støtte for TypeScript-kode
TypeScript har sett økende vekst i popularitet de siste årene, uten tegn til å avta når som helst snart. Å bringe typesikker kodedynamikk til JavaScript har vist seg å være en veldig vellykket innsats.
I dag er det enkelt å sette opp et nytt TypeScript-prosjekt, eller konvertere et eksisterende Node.js-prosjekt til TypeScript, om enn noe tidkrevende.
Å legge til TypeScript-støtte har blitt populært nok til at de fleste moderne rammeverk nå har en form for TypeScript-støtte. Angular ledet an, med ut-av-boksen TypeScript-støtte. I dag, til og med React har metoder for å sette opp TypeScript-støtte.
Deno ble designet med TypeScript-støtte inkludert for å forbedre produktiviteten. Med ut-av-boksen TypeScript-støtte, mangler Deno selv det minimale oppsettet som kreves av Node.js for å utvikle maskinskrevet JavaScript-kode.
Hvis du har en forkjærlighet for TypeScript, kan du komme i gang raskt og enkelt med Denos støtte, men du kan oppleve at du savner noen av standard Node.js-bibliotekene. Mens Deno tilbyr et raskere oppsett, kan mangelen på et utviklet økosystem hemme deg i byggeprosessen.
Linting for å generere renere kode
Node.js har et bredt utvalg av linters du kan velge mellom. Det er mange velutviklede alternativer som du raskt og enkelt kan installere og konfigurere. På samme måte som tilfellet med TypeScript, må du imidlertid gjøre litt benarbeid for å komme i gang med deres valg.
Deno tok en litt annen rute i kodeformatering, og kom med sin egen innebygde linting-løsning for .js-, .ts- og .md-filer. Å kjøre "deno fmt"-kommandoen vil automatisk formatere alle filer i gjeldende arbeidskatalog.
Hvis du ikke er en fan av standard linter, er det et alternativ for å installere og kjøre formateringssystemet du ønsker, akkurat som du ville gjort med Node. Det er enkelt å bytte systemer ettersom Denos linter kjører via en ekstern kommando og ikke som en del av standard byggepipeline.
Hvis du vurderer å bytte ut Denos linter med et nytt system, bør du være klar over potensielle kompatibilitetsproblemer og ha dem i bakhodet. De fleste JavaScript linters vil kreve en installasjon av Node for å kjøre, selv om det ikke er systemet som prosjektet som formateres kjører på.
Pakkehåndtering
Node package manager (npm) er veldig kjent blant moderne utviklere. Ved å bygge på suksessen til lignende systemer som Pythons Pip og Ruby's RubyGems, ble npm raskt populær.
Vedvarende bekymringer fører til utvikling av konkurrerende ledere, som pNPm og Yarn. Det er noen situasjoner der du til og med velger å installere og bruke flere pakkebehandlere med Node.
I dag, hvis du velger å utvikle i Node.js, er du litt bortskjemt med valg når det kommer til pakkehåndtering. Node har et blomstrende økosystem med mange alternativer for pakker å installere. Det er for tiden over 1,3 millioner i hovedregistret for npm.
Npm lar deg publisere dine egne pakker, som fører til et svimlende stort bibliotek.
Deno tok en helt annen tilnærming til pakkehåndtering. Den verken har, eller krever, et pakkehåndteringssystem. I stedet tillater Deno direkte import av eksterne biblioteker fra ikke bare utviklerens system, men alle steder som godtar HTTP-forespørsler.
Dette lar deg importere biblioteker fra Denos depot, eller et hvilket som helst CDN online, direkte fra kodebasen deres.
Denos offisielle pakkeregister er ikke like fullt utviklet som Nodes, takket være Nodes nesten ni år lange forsprang. Muligheten til å importere biblioteker fra hvor som helst holder deg fra å lide konsekvensene av et økosystem som ennå ikke har hatt en sjanse til å vokse til full størrelse.
Samfunnsengasjement i Node og Deno
Node ble opprinnelig utgitt i 2009 av Ryan Dahl, og har hatt god tid for utviklermiljøet til å bli involvert. Med mange tidlige brukere og et betydelig bibliotek med pakker lagret i det offisielle depotet og til din disposisjon, har publikum hatt mye å si i Node.js sin vekst.
Selve plattformen er fullstendig åpen kildekode, vedlikeholdt av OpenJS Foundation og mange bidragsytere.
Deno utgitt i 2018, nesten 9 år etter Node. Den ble hovedsakelig utviklet av Ryan Dahl for å møte bekymringer og beklagelser han hadde med implementeringen av Node. I dag er Deno også åpen kildekode under MIT-lisensen.
Med mange bidragsytere og et eget voksende lager, har Deno sett mye interesse fra samfunnet.
Ytelsesbekymringer for de to rammene
For kodere som er interessert i de relative ytelsesforskjellene mellom de to rammeverkene, er det liten forskjell mellom de to. Denos tilpassede motor skrevet i Rust overlegger et kjernerammeverk som fortsatt er V8-motoren. Til syvende og sist er både Deno og Node sammenlignbare i nesten alle tilfeller ytelsesmessig.
Dette ser ut til å være tilfelle uavhengig av om den resulterende koden kjører på serveren eller klienten. Med ytelsesutbytte som ikke tar med i beslutningen, står du fritt til å velge rammeverket du føler deg mest komfortabel med.
Ryan Dahl, skaperen av begge rammeverkene, kom med en rekke årsaker til at han opprettet Deno. Selv om han nevnte flere faktorer, fra å unnlate å innlemme løfter i mange APIer til det valgte byggesystemet hans, var ikke ytelse en del av prosessen.
Node vs Deno: Hva er det riktige valget?
Under panseret er både Node.js og Deno bemerkelsesverdig like rammeverk. Begge kjører JavaScript ved å bruke V8-motoren med lignende ytelse og muligheter. Selv om det er noen forskjeller i syntaks, pakkeadministrasjon og innebygd støtte, er valget ditt i stor grad basert på dine preferanser.
Node har et svimlende stort økosystem, men Deno lar deg hente avhengighetene dine fra enhver kilde. Til syvende og sist må du se nærmere på din egen utviklingsstil og finne ut hvilken plattform som passer best for deg.