Node.js je možda dobro uspostavljen, ali nemojte zanemariti Deno, sličan okvir od istog programera.
Node.js dugotrajni je okvir koji vam omogućuje pisanje koda na strani poslužitelja u JavaScriptu. Izvorno objavljen 2009., okvir je doživio znatan rast i eksploziju u upotrebi tijekom posljednjih godina.
Deno ima razlike u stilu oblikovanja, sintaksi uvoza i upravljanju paketima, ali isti je inženjer izgradio ove konkurentske okvire na istom stroju.
Danas, Deno postoji dovoljno dugo da zasluži mjesto u nizu mnogih programera. Ako želite započeti novi JavaScript projekt, možda ćete se zapitati koji je pravi izbor.
Značajke čvora i denoa
Gotovo devet godina nakon izlaska Nodea, njegov programer, Ryan Dahl, najavio je novi projekt: Deno. Dok je Node nekada bio jedina opcija za JavaScript na strani poslužitelja, Deno nam je dao alternativu.
Node.js i Deno prilično su slični na mnogo načina. Većina razlika između to dvoje nalazi se ispod haube. Dok Node radi na V8 JavaScript motoru, Deno radi iznad prilagođeno napisanog motora ugrađenog u Rust s jakim fokusom na performanse.
Većina glavnih razlika između ova dva jezika temelji se na značajkama koje svaki jezik podržava. Moduli, linting, typescript i upravljanje paketima postupaju sasvim drugačije između njih dvoje.
Uvoz modula: CommonJS vs. ES
Node.js prema zadanim postavkama koristi module CommonJS sa sintaksom require(). Node vam dopušta da to promijenite mijenjanjem vaših konfiguracijskih datoteka da umjesto toga koriste ECMAScript module sa sintaksom import() ako to žele.
// Ovo je važeći uvoz CommonJS modula u Node.js
var _ = zahtijevati("lodaš");
// Ovo je važeći uvoz ECMAScript modula u Node.js
uvoz _ iz'lodash';
Postoji određena ograničena interoperabilnost između dvije vrste učitavanja ES modula s nekim modulima ECMAScripta koji se mogu uključiti pomoću sintakse require(). Svaka vrsta uvoza malo drugačije obrađuje module, ali oba će raditi u većini slučajeva.
To vam omogućuje da odaberete željenu metodologiju za uključivanje vanjskih modula prilikom izrade projekta.
Deno ima drugačiji pristup kada je riječ o uključivanju vanjskih modula u projekt. Deno koristi sintaksu include() za sve module, međutim, za razliku od uvoza Nodea, moduli uvezeni u Deno mogu doći s bilo koje lokacije. Ove lokacije mogu čak uključivati udaljene mreže za isporuku sadržaja (CDN).
// Ovo je važeća izjava o uvozu u Deno
uvoz" https://deno.land/x/[email protected]/dist/lodash.js";
To vam omogućuje uvoz ovisnosti s bilo koje lokacije, lokalne ili udaljene, nudeći daleko veću fleksibilnost. Ako više volite raditi s tradicionalnom require sintaksom iz Node.js, možete napisati svoju vlastitu polyfill require funkciju u Denu kao zaobilazno rješenje.
Podrška za TypeScript kod
TypeScript bilježi sve veći rast popularnosti tijekom posljednjih nekoliko godina, bez znakova usporavanja u skorije vrijeme. Dovođenje dinamike koda sigurnog tipa u JavaScript pokazalo se iznimno uspješnim pothvatom.
Danas je postavljanje novog TypeScript projekta ili pretvaranje postojećeg Node.js projekta u TypeScript jednostavno, iako donekle oduzima vrijeme.
Dodavanje podrške za TypeScript postalo je dovoljno popularno da većina modernih okvira sada ima neki oblik podrške za TypeScript. Angular je prednjačio s gotovom podrškom za TypeScript. Čak i danas React ima metode za postavljanje podrške za TypeScript.
Deno je dizajniran s uključenom podrškom za TypeScript kako bi poboljšao vašu produktivnost. Uz gotovu podršku za TypeScript, Deno nema čak ni minimalne postavke potrebne za Node.js za razvoj tipkanog JavaScript koda.
Ako volite TypeScript, možete započeti brzo i jednostavno uz podršku tvrtke Deno, no možda ćete propustiti neke od standardnih biblioteka Node.js. Iako Deno nudi brže postavljanje, nedostatak razvijenog ekosustava može vas omesti u procesu izgradnje.
Linting za generiranje čišćeg koda
Node.js ima veliki izbor linkera među kojima možete birati. Postoji mnogo dobro razvijenih opcija koje možete brzo i jednostavno instalirati i konfigurirati. Slično kao u slučaju TypeScripta, međutim, morat ćete malo poraditi da biste započeli s njihovim odabranim linterom.
Deno je krenuo malo drugačijim putem u formatiranju koda, dolazeći sa svojim vlastitim ugrađenim rješenjem za linting za .js, .ts i .md datoteke. Pokretanje naredbe "deno fmt" automatski će formatirati sve datoteke u trenutnom radnom direktoriju.
Ako niste obožavatelj zadanog lintera, postoji opcija da instalirate i pokrenete svoj sustav oblikovanja po izboru, baš kao što biste to učinili s Nodeom. Prebacivanje sustava jednostavno je jer Denoov linter radi putem vanjske naredbe, a ne kao dio zadanog cjevovoda za izgradnju.
Ako razmišljate o zamjeni Denovog lintera za novi sustav, trebali biste biti svjesni mogućih problema s kompatibilnošću i imati ih na umu. Većina JavaScript lintera će zahtijevati instalaciju Nodea za pokretanje, čak i ako to nije sustav na kojem se izvodi projekt koji se formatira.
Upravljanje paketima
Node package manager (npm) vrlo je poznat među modernim programerima. Nadovezujući se na uspjeh sličnih sustava kao što su Pythonov Pip i Rubyjev RubyGems, npm je brzo stekao popularnost.
Dugotrajne brige dovode do razvoja konkurentskih menadžera, kao što su pNPm i Yarn. Postoje neke situacije u kojima se čak možete odlučiti instalirati i koristiti više upravitelja paketa s Nodeom.
Danas, ako se odlučite razvijati u Node.js, pomalo ste razmaženi izborom kada je u pitanju upravljanje paketima. Node se može pohvaliti uspješnim ekosustavom s mnoštvom opcija za instalaciju paketa. Trenutačno ih je više od 1,3 milijuna u glavnom npm registru.
Npm vam omogućuje objavljivanje vlastitih paketa, što vodi do nevjerojatno velike knjižnice.
Deno je zauzeo potpuno drugačiji pristup upravljanju paketima. Ne posjeduje niti zahtijeva sustav upravljanja paketima. Umjesto toga, Deno dopušta izravan uvoz vanjskih biblioteka ne samo iz sustava razvojnog programera, već i s bilo koje lokacije koja prihvaća HTTP zahtjeve.
To vam omogućuje uvoz biblioteka iz Deno-ovog repozitorija ili bilo kojeg CDN-a na mreži, izravno iz njihove baze koda.
Denoov službeni registar paketa nije u potpunosti razvijen kao Nodeov, zahvaljujući Nodeovoj gotovo devetogodišnjoj prednosti. Mogućnost uvoza knjižnica s bilo kojeg mjesta sprječava vas da trpite posljedice ekosustava koji još nije imao priliku narasti do pune veličine.
Uključivanje zajednice u Node i Deno
Izvorno objavljen 2009. od strane Ryana Dahla, Node je imao dovoljno vremena da se zajednica programera uključi. Uz mnoštvo ranih korisnika i pozamašnu biblioteku paketa pohranjenih u službenom repozitoriju i vama na raspolaganju, javnost je imala puno mišljenja o rastu Node.js-a.
Sama platforma je potpuno otvorenog koda, održavaju je OpenJS Foundation i mnogi suradnici.
Deno je objavljen 2018., gotovo 9 godina nakon Nodea. Uglavnom ga je razvio Ryan Dahl kako bi riješio probleme i žaljenja koje je imao sa svojom implementacijom Nodea. Danas je Deno također otvorenog koda pod licencom MIT-a.
Uz mnoštvo suradnika i vlastito rastuće spremište, Deno je vidio dosta interesa zajednice.
Zabrinutost u pogledu izvedbe dvaju okvira
Za programere koji su zainteresirani za relativne razlike u izvedbi između dva okvira, mala je razlika između njih. Denov prilagođeni motor napisan u Rustu prekriva temeljni okvir koji je još uvijek V8 motor. U konačnici, i Deno i Node su usporedivi u gotovo svim slučajevima što se tiče izvedbe.
Čini se da je to slučaj bez obzira izvodi li se rezultirajući kod na poslužitelju ili klijentu. Budući da prinosi performansi nisu faktor u odluci, slobodni ste odabrati okvir koji vam najviše odgovara.
Ryan Dahl, tvorac oba okvira, ponudio je niz razloga za stvaranje Denoa. Iako je spomenuo nekoliko čimbenika, od neuspjeha u ispravnom uključivanju obećanja u mnoge API-je do njegovog odabranog sustava izgradnje, performanse nisu bile dio procesa.
Node vs Deno: Koji je pravi izbor?
Ispod haube, i Node.js i Deno su nevjerojatno slični okviri. Oba izvršavaju JavaScript pomoću V8 motora sa sličnim performansama i mogućnostima. Iako postoje neke razlike u sintaksi, upravljanju paketima i ugrađenoj podršci, vaš izbor koji ćete koristiti uglavnom se temelji na vašim preferencijama.
Node se može pohvaliti nevjerojatno velikim ekosustavom, ali Deno vam omogućuje da izvučete svoje ovisnosti iz bilo kojeg izvora. U konačnici, morat ćete pomno proučiti svoj stil razvoja i odrediti koja vam platforma više odgovara.