Node.js is misschien goed ingeburgerd, maar vergeet Deno niet, een vergelijkbaar framework van dezelfde ontwikkelaar.
Node.js is een langlopend framework waarmee u server-side code in JavaScript kunt schrijven. Oorspronkelijk uitgebracht in 2009, heeft het framework de afgelopen jaren een aanzienlijke groei en een explosie in gebruik doorgemaakt.
Deno heeft verschillen in opmaakstijl, importsyntaxis en pakketbeheer, maar dezelfde ingenieur bouwde deze concurrerende frameworks op dezelfde engine.
Vandaag de dag bestaat Deno al lang genoeg om een plek te verdienen in de stapels van veel ontwikkelaars. Als u een nieuw JavaScript-project wilt starten, vraagt u zich misschien af wat de juiste keuze is.
Node- en Deno-functies
Bijna negen jaar na de release van Node kondigde de ontwikkelaar, Ryan Dahl, een nieuw project aan: Deno. Waar Node ooit de enige optie was voor server-side JavaScript, heeft Deno ons een alternatief gegeven.
Node.js en Deno lijken in veel opzichten op elkaar. De meeste verschillen tussen de twee komen onder de motorkap voor. Waar Node draait op de V8 JavaScript-engine, draait Deno over een op maat geschreven engine gebouwd in Rust met een sterke focus op prestaties.
De meeste van de belangrijkste verschillen tussen de twee zijn gebaseerd op de functies die elke taal ondersteunt. Modules, linting, typescript en pakketbeheer worden allemaal heel anders behandeld tussen de twee.
Module-import: CommonJS vs. ES
Node.js gebruikt standaard CommonJS-modules met de require()-syntaxis. Met Node kunt u dit wijzigen door uw configuratiebestanden te wijzigen om in plaats daarvan ECMAScript-modules te gebruiken met de import()-syntaxis als ze dat willen.
// Dit is een geldige CommonJS-module-import in Node.js
var _ = vereisen("lodash");
// Dit is een geldige ECMAScript-module-import in Node.js
importeren _ van'lodash';
Er is enige beperkte interoperabiliteit tussen de twee soorten laden van ES-modules, waarbij sommige ECMAScript-modules kunnen worden opgenomen met behulp van de require()-syntaxis. Elk importtype verwerkt modules iets anders, maar beide zullen in de meeste gevallen werken.
Hierdoor kunt u uw voorkeursmethode kiezen voor het opnemen van externe modules bij het maken van een project.
Deno pakt het anders aan als het gaat om het opnemen van externe modules in een project. Deno gebruikt de include()-syntaxis voor alle modules, maar in tegenstelling tot de import van Node kunnen in Deno geïmporteerde modules van elke locatie komen. Deze locaties kunnen zelfs externe content delivery-netwerken (CDN's) omvatten.
// Dit is een geldige importverklaring in Deno
importeren" https://deno.land/x/[email protected]/dist/lodash.js";
Hierdoor kunt u afhankelijkheden importeren vanaf elke locatie, lokaal of op afstand, wat een veel grotere flexibiliteit biedt. Als u liever met de traditionele vereist-syntaxis van Node.js werkt, kunt u als tijdelijke oplossing uw eigen polyfill-behoeftefunctie in Deno schrijven.
Ondersteuning voor TypeScript-code
TypeScript is de afgelopen jaren steeds populairder geworden, en er zijn geen tekenen dat het snel zal vertragen. Het is een enorm succesvolle onderneming gebleken om typeveilige codedynamiek naar JavaScript te brengen.
Tegenwoordig is het opzetten van een nieuw TypeScript-project of het converteren van een bestaand Node.js-project naar TypeScript eenvoudig, zij het enigszins tijdrovend.
Het toevoegen van TypeScript-ondersteuning is zo populair geworden dat de meeste moderne frameworks nu een vorm van TypeScript-ondersteuning hebben. Angular liep voorop, met out-of-the-box TypeScript-ondersteuning. Vandaag zelfs React heeft methoden om TypeScript-ondersteuning in te stellen.
Deno is ontworpen met TypeScript-ondersteuning om uw productiviteit te verbeteren. Met out-of-the-box TypeScript-ondersteuning mist Deno zelfs de minimale setup die Node.js nodig heeft om getypte JavaScript-code te ontwikkelen.
Als je een voorliefde hebt voor TypeScript, kun je snel en gemakkelijk aan de slag met de ondersteuning van Deno, maar het kan zijn dat je enkele van de standaard Node.js-bibliotheken mist. Hoewel Deno een snellere installatie biedt, kan het ontbreken van een ontwikkeld ecosysteem u belemmeren in uw bouwproces.
Linting om schonere code te genereren
Node.js heeft een breed scala aan linters waaruit u kunt kiezen. Er zijn tal van goed ontwikkelde opties die u snel en eenvoudig kunt installeren en configureren. Net als bij TypeScript, zul je echter een beetje beenwerk moeten doen om aan de slag te gaan met hun favoriete linter.
Deno nam een iets andere route in codeformattering en kwam met zijn eigen ingebouwde linting-oplossing voor .js-, .ts- en .md-bestanden. Als u de opdracht "deno fmt" uitvoert, worden alle bestanden in de huidige werkmap automatisch geformatteerd.
Als je geen fan bent van de standaard linter, is er een optie om je gewenste formatteersysteem te installeren en uit te voeren, net zoals je zou doen met Node. Schakelen tussen systemen is eenvoudig omdat Deno's linter via een externe opdracht wordt uitgevoerd en niet als onderdeel van de standaard build-pijplijn.
Als u overweegt om Deno's linter in te ruilen voor een nieuw systeem, moet u zich bewust zijn van mogelijke compatibiliteitsproblemen en daar rekening mee houden. De meeste JavaScript-linters vereisen een installatie van Node om te worden uitgevoerd, zelfs als dit niet het systeem is waarop het project dat wordt geformatteerd, wordt uitgevoerd.
Pakketbeheer
Node-pakketbeheerder (npm) is zeer bekend bij moderne ontwikkelaars. Voortbouwend op het succes van vergelijkbare systemen zoals Python's Pip en Ruby's RubyGems, won npm snel aan populariteit.
Aanhoudende zorgen leiden tot de ontwikkeling van concurrerende managers, zoals pNPm en Yarn. Er zijn enkele situaties waarin u er zelfs voor kunt kiezen om te installeren en te gebruiken meerdere pakketbeheerders met Node.
Als je er tegenwoordig voor kiest om in Node.js te ontwikkelen, heb je een beetje keuze te over als het gaat om pakketbeheer. Node heeft een bloeiend ecosysteem met tal van opties om pakketten te installeren. Er zijn momenteel meer dan 1,3 miljoen in het belangrijkste npm-register.
Met Npm kunt u uw eigen pakketten publiceren, wat leidt tot een verbluffend grote bibliotheek.
Deno pakte pakketbeheer op een heel andere manier aan. Het heeft geen pakketbeheersysteem en vereist dat ook niet. In plaats daarvan staat Deno de directe import toe van externe bibliotheken, niet alleen van het systeem van de ontwikkelaar, maar van elke locatie die HTTP-verzoeken accepteert.
Hiermee kunt u bibliotheken uit de repository van Deno, of een CDN online, rechtstreeks vanuit hun codebasis importeren.
Het officiële pakketregister van Deno is niet zo volledig ontwikkeld als dat van Node, dankzij de bijna negen jaar durende voorsprong van Node. De mogelijkheid om bibliotheken overal vandaan te importeren voorkomt dat u de gevolgen ondervindt van een ecosysteem dat nog niet de kans heeft gehad om volledig uit te groeien.
Betrokkenheid van de gemeenschap bij Node en Deno
Oorspronkelijk uitgebracht in 2009 door Ryan Dahl, heeft Node genoeg tijd gehad voor de ontwikkelaarsgemeenschap om mee te doen. Met tal van early adopters en een omvangrijke bibliotheek met pakketten die zijn opgeslagen in de officiële repository en tot uw beschikking staan, heeft het publiek veel inspraak gehad in de groei van Node.js.
Het platform zelf is volledig open-source, onderhouden door de OpenJS Foundation en vele bijdragers.
Deno uitgebracht in 2018, bijna 9 jaar na Node. Het is voornamelijk ontwikkeld door Ryan Dahl om de zorgen en spijt die hij had met zijn implementatie van Node weg te nemen. Tegenwoordig is Deno ook open source onder de MIT-licentie.
Met veel bijdragers en een groeiende eigen repository heeft Deno veel belangstelling van de gemeenschap gezien.
Prestatieproblemen van de twee raamwerken
Voor programmeurs die geïnteresseerd zijn in de relatieve prestatieverschillen tussen de twee frameworks, is er weinig verschil tussen de twee. Deno's aangepaste motor geschreven in Rust overlapt een kernframework dat nog steeds de V8-motor is. Uiteindelijk zijn zowel Deno als Node qua prestaties in bijna alle gevallen vergelijkbaar.
Dit lijkt het geval te zijn, ongeacht of de resulterende code op de server of client draait. Omdat prestatieopbrengsten geen rol spelen bij de beslissing, bent u vrij om het raamwerk te kiezen waar u zich het prettigst bij voelt.
Ryan Dahl, de maker van beide frameworks, gaf verschillende redenen voor zijn creatie van Deno. Hoewel hij verschillende factoren noemde, van het niet correct integreren van beloften in veel API's tot het door hem gekozen buildsysteem, maakten prestaties geen deel uit van het proces.
Node vs Deno: wat is de juiste keuze?
Onder de motorkap zijn zowel Node.js als Deno opmerkelijk vergelijkbare frameworks. Beide voeren JavaScript uit met behulp van de V8-engine met vergelijkbare prestaties en mogelijkheden. Hoewel er enkele verschillen zijn in syntaxis, pakketbeheer en ingebouwde ondersteuning, is de keuze die u wilt gebruiken grotendeels gebaseerd op uw voorkeur.
Node heeft een verbluffend groot ecosysteem, maar met Deno kunt u uw afhankelijkheden uit elke bron halen. Uiteindelijk moet je je eigen ontwikkelstijl onder de loep nemen en bepalen welk platform het meest geschikt voor je is.