Node.js je morda dobro uveljavljen, vendar ne spreglejte Deno, podobnega ogrodja istega razvijalca.
Node.js je dolgotrajno ogrodje, ki vam omogoča pisanje strežniške kode v JavaScriptu. Ogrodje, ki je bilo prvotno izdano leta 2009, je v zadnjih letih doživelo znatno rast in eksplozijo uporabe.
Deno ima razlike v slogu oblikovanja, sintaksi uvoza in upravljanju paketov, vendar je isti inženir zgradil ta konkurenčna ogrodja na istem motorju.
Danes Deno obstaja dovolj dolgo, da si je prislužil mesto med številnimi razvijalci. Če želite začeti nov projekt JavaScript, se boste morda spraševali, katera je prava izbira.
Funkcije vozlišča in deno
Skoraj devet let po izdaji Node je njegov razvijalec Ryan Dahl napovedal nov projekt: Deno. Če je bil Node nekoč edina možnost za JavaScript na strani strežnika, nam je Deno dal alternativo.
Node.js in Deno sta si v mnogih pogledih precej podobna. Večina razlik med obema je pod pokrovom. Če Node deluje na motorju V8 JavaScript, Deno izvaja nad motorjem, napisanim po meri, zgrajenim v Rustu z močnim poudarkom na zmogljivosti.
Večina večjih razlik med obema temelji na tem, katere funkcije podpira posamezni jezik. Moduli, linting, tipkopis in upravljanje paketov se obravnavajo precej drugače.
Uvozi modulov: CommonJS vs. ES
Node.js privzeto uporablja module CommonJS s sintakso require(). Node vam dovoljuje, da to spremenite tako, da spremenite vaše konfiguracijske datoteke, da namesto tega uporabljajo module ECMAScript s sintakso import(), če to želijo.
// To je veljaven uvoz modula CommonJS v Node.js
var _ = zahtevati("lodaš");
// To je veljaven uvoz modula ECMAScript v Node.js
uvoz _ od'lodash';
Obstaja nekaj omejene interoperabilnosti med obema vrstama nalaganja modulov ES, pri čemer je nekatere module ECMAScript mogoče vključiti s sintakso require(). Vsaka vrsta uvoza nekoliko drugače obravnava module, vendar bo kateri koli deloval v večini primerov.
To vam omogoča, da izberete želeno metodologijo za vključitev zunanjih modulov pri ustvarjanju projekta.
Deno ima drugačen pristop, ko gre za vključitev zunanjih modulov v projekt. Deno uporablja sintakso include() za vse module, vendar lahko za razliko od uvoza Node moduli, uvoženi v Deno, prihajajo s katere koli lokacije. Te lokacije lahko vključujejo celo oddaljena omrežja za dostavo vsebine (CDN).
// To je veljavna uvozna izjava v Deno
uvoz" https://deno.land/x/[email protected]/dist/lodash.js";
To vam omogoča uvoz odvisnosti s katere koli lokacije, lokalne ali oddaljene, kar ponuja veliko večjo prilagodljivost. Če raje delate s tradicionalno zahtevano sintakso iz Node.js, lahko kot rešitev napišete lastno funkcijo polyfill require v Denu.
Podpora za kodo TypeScript
Priljubljenost TypeScripta v zadnjih nekaj letih narašča, brez znakov, da bi se kmalu upočasnila. Prenos dinamike kode, varne za tipe, v JavaScript se je izkazal za izjemno uspešen podvig.
Danes je nastavitev novega projekta TypeScript ali pretvorba obstoječega projekta Node.js v TypeScript preprosta, čeprav nekoliko zamudna.
Dodajanje podpore za TypeScript je postalo dovolj priljubljeno, da ima večina sodobnih ogrodij neko obliko podpore za TypeScript. Angular je vodil pot s podporo za TypeScript, ki je že pripravljena. Tudi danes React ima metode za nastavitev podpore za TypeScript.
Deno je bil zasnovan z vključeno podporo za TypeScript, ki pomaga izboljšati vašo produktivnost. Z že pripravljeno podporo za TypeScript Deno nima niti minimalne nastavitve, ki jo zahteva Node.js za razvoj vtipkane kode JavaScript.
Če obožujete TypeScript, lahko začnete hitro in preprosto s podporo družbe Deno, vendar se lahko zgodi, da pogrešate nekatere standardne knjižnice Node.js. Medtem ko Deno ponuja hitrejšo nastavitev, vas lahko pomanjkanje razvitega ekosistema ovira pri gradnji.
Linting za ustvarjanje čistejše kode
Node.js ima široko paleto linterjev, med katerimi lahko izbirate. Obstaja veliko dobro razvitih možnosti, ki jih lahko hitro in enostavno namestite in konfigurirate. Podobno kot v primeru TypeScripta pa boste morali narediti nekaj malega dela, da začnete z njihovim izbranim linterjem.
Deno je ubral nekoliko drugačno pot pri oblikovanju kode in je prišel z lastno vgrajeno rešitvijo za linting za datoteke .js, .ts in .md. Zagon ukaza "deno fmt" bo samodejno formatiral vse datoteke v trenutnem delovnem imeniku.
Če niste ljubitelj privzetega linterja, obstaja možnost namestitve in zagona vašega izbranega sistema oblikovanja, tako kot bi to storili z Node. Preklapljanje sistemov je preprosto, saj Denov linter deluje prek zunanjega ukaza in ne kot del privzetega gradbenega cevovoda.
Če razmišljate o zamenjavi linterja Deno za nov sistem, se morate zavedati morebitnih težav z združljivostjo in jih imeti v mislih. Večina linterjev JavaScript bo za izvajanje zahtevala namestitev Node, tudi če to ni sistem, v katerem se izvaja projekt, ki ga formatirate.
Upravljanje paketov
Node package manager (npm) je med sodobnimi razvijalci zelo dobro znan. Na podlagi uspeha podobnih sistemov, kot sta Pythonov Pip in Rubyjev RubyGems, je npm hitro pridobil na priljubljenosti.
Dolgotrajni pomisleki vodijo v razvoj konkurenčnih menedžerjev, kot sta pNPm in Yarn. V nekaterih situacijah se lahko celo odločite za namestitev in uporabo več upraviteljev paketov z Node.
Če se danes odločite za razvoj v Node.js, ste nekoliko razvajeni glede izbire, ko gre za upravljanje paketov. Node se ponaša z uspešnim ekosistemom z veliko možnostmi za namestitev paketov. Trenutno jih je v glavnem registru npm več kot 1,3 milijona.
Npm vam omogoča objavo lastnih paketov, ki vodi do osupljivo velike knjižnice.
Deno je ubral popolnoma drugačen pristop k upravljanju paketov. Niti nima niti ne zahteva sistema za upravljanje paketov. Namesto tega Deno omogoča neposreden uvoz zunanjih knjižnic ne samo iz razvijalčevega sistema, temveč s katere koli lokacije, ki sprejema zahteve HTTP.
To vam omogoča uvoz knjižnic iz repozitorija družbe Deno ali katerega koli spletnega CDN neposredno iz njihove kodne baze.
Denov uradni register paketov ni tako v celoti razvit kot Nodeov, zahvaljujoč skoraj devetletni prednosti Node. Zmožnost uvoza knjižnic od koder koli vam preprečuje, da bi utrpeli posledice ekosistema, ki še ni imel priložnosti zrasti do polne velikosti.
Vključenost skupnosti v Node in Deno
Node, ki ga je leta 2009 izdal Ryan Dahl, je imel dovolj časa, da se je lahko vključila skupnost razvijalcev. Z veliko začetnimi uporabniki in obsežno knjižnico paketov, ki so shranjeni v njegovem uradnem repozitoriju in so vam na voljo, je javnost imela veliko besede pri rasti Node.js.
Sama platforma je popolnoma odprtokodna, vzdržujejo jo OpenJS Foundation in številni sodelavci.
Deno je izšel leta 2018, skoraj 9 let po Nodeu. V glavnem ga je razvil Ryan Dahl, da bi obravnaval pomisleke in obžalovanja, ki jih je imel s svojo implementacijo Node. Danes je Deno tudi odprtokoden pod licenco MIT.
Z veliko sodelavci in rastočim lastnim skladiščem je Deno opazil veliko zanimanja skupnosti.
Pomisleki glede zmogljivosti obeh okvirov
Za koderje, ki jih zanimajo relativne razlike v zmogljivosti med obema okviroma, je razlika med njima majhna. Denov prilagojen motor, napisan v Rustu, prekriva osrednji okvir, ki je še vedno motor V8. Navsezadnje sta tako Deno kot Node skoraj v vseh primerih primerljiva glede zmogljivosti.
Zdi se, da je to tako ne glede na to, ali se nastala koda izvaja na strežniku ali odjemalcu. Glede na to, da donos zmogljivosti ni dejavnik pri odločitvi, lahko svobodno izberete okvir, ki vam najbolj ustreza.
Ryan Dahl, ustvarjalec obeh ogrodij, je ponudil vrsto razlogov za ustvarjanje Dena. Čeprav je omenil več dejavnikov, od neustrezne vključitve obljub v številne API-je do izbranega sistema gradnje, zmogljivost ni bila del procesa.
Node vs Deno: katera je prava izbira?
Pod pokrovom sta tako Node.js kot Deno izjemno podobna ogrodja. Oba izvajata JavaScript z motorjem V8 s podobno zmogljivostjo in zmogljivostmi. Čeprav obstajajo nekatere razlike v sintaksi, upravljanju paketov in vgrajeni podpori, je vaša izbira, katero uporabiti, v veliki meri odvisna od vaših želja.
Node se ponaša z osupljivo velikim ekosistemom, vendar vam Deno omogoča, da svoje odvisnosti povlečete iz katerega koli vira. Navsezadnje boste morali natančno preučiti svoj razvojni slog in ugotoviti, katera platforma je bolj primerna za vas.