NRG stog za brži razvoj
Vjerojatno nikada niste čuli ni za Vulcan.js ni za Apollo Universal Starter Kit - barem ne još.
No, prilično sam siguran da ste čuli za React, Node.js i GraphQL. U redu, to nazivamo potcjenjivanjem: vjerojatno ste vidjeli milijune tweetova, članaka na blogovima, okupljanja i podcastova o toj trojici i njihovim čarobnim moćima.

Puno je dobrih razloga zašto web-programeri hvale te tehnologije. Ipak, ako ste ikada pokušali ispisati modernu JavaScript aplikaciju s cjelovitim hrpom, možda ste primijetili količinu uzorka koju može proizvesti.
To posebno smeta generičkim značajkama: postavljanje provjere autentičnosti, postavljanje baze podataka, postavljanje glavne komponente aplikacije, postavljanje postavki ...
Vulcan.js i AUSK imaju za cilj učiniti vas brzim i učinkovitim JavaScript programerom s punim slogom. Obje se oslanjaju na modularnu arhitekturu, s Reactom za korisničko sučelje, Nodeom za pozadinu i Apollo graphQL za komunikacijski sloj klijent / poslužitelj. Oba sadrže mnoštvo unaprijed kodiranih modula, tako da se možete usredotočiti na vrijedne značajke.
Međutim, svaki od njih ima vrlo različite pristupe problemu, pa sam pomislio da biste mogli uživati u usporedbi.
Prije svega predstavimo natjecatelje.
Izjava o odricanju odgovornosti: Suradnik sam na Vulcan.js-u, ali obje te tehnologije koristio sam za projekte svojih klijenata, tako da ću ostati što objektivniji.
Apollo UNIVERSAL početni komplet

U redu, kad kažu univerzalni, misle na UNIVERZALNI. Jeste li ikada vidjeli JavaScript obrazac koji uključuje Scala poslužitelj za veliki posao? I potpuni React Native setup s Expoom? Čak zatvaraju vječnu (i iritantnu) raspravu Kutni naspram Reagiranja podržavajući oboje.

Nemam puno toga za reći. Mislim, pogledajte opet ovaj stog, to je najluđi san web programera!
Zapravo imam nešto dodati: uključuje i Bootstrap i Ant Design kao okvire za oblikovanje, Knex za povezivanje s SQL bazom podataka (MongoDB veza nije uključena, ali je lako izvediva) i napisan je u TypeScript-u. Sve osnovne značajke JS / GraphQL aplikacije pružaju se na uzorku (izbornik, autorizacija itd.) + Nekoliko modula više razine koji služe kao primjeri.
Link: //github.com/sysgears/apollo-universal-starter-kit
Vulkan: izvan univerzalnog, izomorfan

Sjećate se Meteora i teleskopa? Znam da se JS ekosustav brzo kreće, ali ovo zlatno doba bilo je kao prije samo 2 ili 3 godine.
Meteor je bio prvi okvir koji je u potpunosti iskoristio kombinaciju JavaScript-a na strani poslužitelja i klijenta, dopuštajući pisanje izomorfnog koda koji radi u oba okruženja. Teleskop je bio Meteor-ova aplikacija koja je trebala u potpunosti uživati u svojoj paketno orijentiranoj arhitekturi.
Iako se i dalje koristi u mnogim profesionalnim aplikacijama i poznat je većini programera, Meteor je osakaćen nekim tehničkim ograničenjima koja sprječavaju širu upotrebu: sustavom kompatibilne s webpackom, upraviteljem paketa koji je sada nadmašen od NPM-a ili RAM-a. trošeći protokol za razmjenu podataka u stvarnom vremenu.
A ja tek trebam otkriti okvir koji razvojne programere čini upola produktivnijima od Meteora. Ali ne brinite, sada postoji ozbiljan kandidat. Shvaćate: Vulkan!
Korištenje Apollo GraphQL-a i racionalna arhitektura usmjerena na paket omogućuju Vulcanu da prevlada Meteor-ova ograničenja uživajući iste prednosti: potpuno modularnu arhitekturu, deklarativno programiranje, izomorfizam i tako dalje.
Vulcan je zamišljen kao šina JavaScript ekosustava. Lako započeti, ali dovoljno potpun za pisanje bilo koje aplikacije.
Pogledajte moj prethodni članak za cjelovitiji opis vulkanskih obrazaca koji ciljaju brzinu razvoja.
Link: //vulcanjs.org/
# 1: Framework VS Boilerplate
Prva glavna razlika između ovih alata: AUSK je ploča za uzorke, dok je Vulcan okvir. Možda se pitate gdje leži razlika?
Vulkan, okvir
Okvir je namijenjen svakodnevnom učinkovitijem programeru pružajući određeni skup funkcija i pomagača. Obično je dizajniran da ostane odvojen od vaše aplikacije. S vremena na vrijeme možete ažurirati svoju aplikaciju kad god se objavi nova verzija okvira.
Obično razlikujemo okvire i knjižnice na temelju razine specijalizacije. Okvir obično omogućuje isporuku značajki na poslovnoj razini, dok je knjižnica specijaliziraniji tehnički alat. Ali oboje uglavnom rade isto.
Ograničenje okvira ili udova jest da se možete osjećati izgubljeno kad vas napuste. Što radite kada greška nije u vašoj aplikaciji, već u Reactu ili Apollou?
Moje je osnovno pravilo da kada koristite okvir, trebali biste biti spremni pridonijeti njegovom razvoju, barem otvaranjem problema kad god naiđete na grešku.
AUSK, bojler
Uzorak je dobro napisan dio koda s potpuno radnim razvojnim okruženjem. To je sve. S uzorkom je teže pratiti ažuriranja jer kôd uzorka nije jasno odvojen od vaše aplikacije. Otprilike kao Create React App nakon izbacivanja.
Obično pruža samo nekoliko prilagođenih metoda. U prvom ćete se mjesecu osjećati brže i dobit ćete korist od arhitekture testirane u bitkama, ali na kraju će vaša brzina krstarenja biti uglavnom ista kao bez tablice.
Kotlovska ploča je daleko veća sloboda od okvira, ali i manji utjecaj na vašu učinkovitost.
# 2 Krivulja učenja
Vulcan: GraphQL olakšan
Vulcan može biti dobar način da prvi put shvatite GraphQL jer ... zapravo ne trebate pisati GraphQL. Okvir generira GraphQL shemu i rješavače za vas na temelju vašeg podatkovnog modela. Koristeći alate za programere poput GraphiQL ili GraphQL Voyager, možete vizualizirati i poigrati se shemom kako biste shvatili kako se vaše značajke prevode u GraphQL.
Drugi korak je razumijevanje logike samog Vulcana. Vodič uživo uključen je u aplikaciju "Vulcan Starter" kako bi vam pomogao u procesu.
AUSK: za puriste
AUSK arhitektura daleko je bliža onome na što su programeri Express navikli. Zamislite svoju kanonsku Express aplikaciju, ali s instaliranim GraphQL-om i arhitekturom zasnovanom na paketima. Nema iznenađenja.
To također znači da ćete trebati shvatiti osnove GraphQL-a da biste koristili AUSK, uz naravno Node, Express i React i bilo koju bazu podataka koju koristite (ali isto vrijedi i za Vulcan). Srećom, nudi nekoliko primjera koji će vam pomoći u procesu, uključujući stvaranje i popisivanje podataka, pa čak i prijenos datoteka.
Zaključak: Full-stack programeri moraju puno svladati
JavaScript ekosustav sazrijeva sve više i više, što također znači da je teže naučiti i razumjeti početnike.
Da biste u potpunosti uživali u tim tehnologijama, trebat će vam barem malo znanja o modernom razvoju JavaScript-a i React-a.
Ne očekujte da ćete prvog dana biti potpuno produktivni. Usprkos tome, postoji čitav niz besplatnih ili besplatnih tečajeva za učenje modernog JavaScript razvoja u cijelom nizu. Proučavanje AUSK-a i Vulcana može biti nevjerojatan izvor inspiracije.
# 3 Brzina razvoja
Vulkan: automatizirajte sve stvari
Kad se dobro koristi, Vulcan je nevjerojatno brz u pružanju značajki. To je zato što se puno oslanja na automatiziranu generaciju, tako da može proizvesti najrelevantnije dijelove aplikacije za nekoliko sati sve dok je vaš podatkovni model točno definiran.
Ovaj se obrazac naziva deklarativno programiranje: vi "izjavljujete" kako vaša aplikacija radi i prepuštate okviru da obavi posao. Teško ga je implementirati, ali može biti izuzetno moćan.
AUSK: više slobode
Budući da je AUSK usmjeren na osnovni model, malo je teže dodati osnovne značajke jer je to postupak u više koraka:
- napišite svoju GraphQL shemu
- isto za rješavače, mutacije
- isto za vaš model baze podataka (koristeći Knex ili Mongoose)
- isto za vaše React komponente
- ...
Međutim,ako trebate napisati prilagođenu značajku, bit će lakše s AUSK-om nego s Vulcanom. Dakle, ako imate vrlo malo podatkovnih modela, ali složene značajke, AUSK će biti učinkovitiji od Vulcana.
Nadamo se da se kontinuirano radi na tome da AUSK postane deklarativniji, kroz inovativni sustav sheme nadahnut dizajnom domene, shemu domene.
Zaključak: odaberite pravi alat za pravi slučaj upotrebe
Ne postoji čarobna univerzalna tehnologija za JS razvoj u punom slogu. Brzina razvoja svakog okvira uvelike ovisi o temeljnom slučaju korištenja. Skloniji sam Vulcanu za podatkovno orijentirane platforme i profesionalne alate, a AUSK za B2C SaaS platforme koje zahtijevaju više prilagođenih značajki.
# 4 Zajednica, podrška i zrelost
Vulkan: nasljednik Meteora
Vulcan je okvir Sacha Greifa, koji je dugogodišnji programer Meteora i vrlo je uložio u JavaScript zajednicu (između ostalog i država JS i država CSS).
Aktivni je Slack u kojem početnici i drugi entuzijasti mogu brzo pronaći odgovore na svoja pitanja.
AUSK: projekt koji se aktivno održava
AUSK održava SysGears, posebno Victor Vlasenko, osnivač tvrtke.
Projekt je povezan s Gitterom. Tijekom moje najnovije slobodne misije s AUSK-om, Victor je vrlo brzo odgovorio na moja pitanja i pitanja. Čak je spojio podršku za Storybook nakon što sam pokušao.
Zaključak: male, ali bogate zajednice
Obje se tehnologije koriste u proizvodnji u više projekata, tako da su već sigurne za upotrebu. Zajednice aktivno rastu i prilagođene početnicima.
Ako trebate stvoriti tim, nemojte očekivati da ćete pronaći slobodnjake koji precizno poznaju te tehnologije, previše su specifični. Umjesto toga, usredotočite se na pronalaženje programera JavaScript-a s punim slogom koji će ih moći brzo naučiti. Alternativno, možete otići do izvora i pronaći prave stručnjake među zajednicama Vulcan ili AUSK.
# 5 Implementacija
Nije puno za usporedbu, oba okvira omogućuju postavljanje na platforme koje nude besplatne usluge poput Zeit Now i Heroku, kao i postavljanje na vaš vlastiti prilagođeni poslužitelj.
# 6 Skalabilnost koda i modularni uzorci
Vulkan: podijelite napore
Jedna od prednosti okvira je podjela napora. Krajnja upotreba je jasnija, a time nam omogućuje integriranje različitih optimizacija u sam okvir.
Vulcan nudi uzorke poput povratnih poziva / kuka, poboljšanja i centralne registracije kako bi u potpunosti iskoristio svoju arhitekturu orijentiranu na paket. Na primjer, u mogućnosti smo dodati korisničko sučelje materijala, uključujući SSR, bez mijenjanja ijednog retka koda u modulu Vulcan Core.
Preciznije, Vulcan nudi različite register
metode za svaku strukturu podataka, na primjer, kao registerComponent
i povratne pozive, poput onih router.wrapper
koji omogućuju umotavanje korijenske App
komponente React. Datoteku trebate uvesti samo jednom na razini unosa paketa ( main
datoteke).
AUSK: započnite pravim putem, završite sami
Modularna arhitektura ograničava iskušenje pisanja špageti koda. Favorizira ponovnu upotrebu koda u svim aplikacijama. Svaki paket posjeduje index.ts
datoteku koja deklarira relevantne posredničke programe, funkcije pokretanja i funkcije GraphQL koje se dijele s drugim modulima.
Dobro imenovani module
modul nudi klase za svako okruženje za registraciju novog modula, poput ServerModule
i ClientModule
. To je jedini modul koji se zapravo koristi izravno na razini aplikacije.
export default new ServerModule({ onAppCreate: [ callback1, callback2] })
Interno će se svi moduli spojiti u jedan veliki modul koji će se na kraju koristiti za stvaranje aplikacije. Na primjer, svi onAppCreate
povratni pozivi izvodit će se jedan za drugim.
To je relativno čist uzorak i vrlo pametna arhitektura. Mislim, čak je i upravitelj modula modul, nije li to lijepo?
Ali ostalo je na vama. Lijepo, moći ćete sve optimizirati! Pa, hoćete li izgubiti par svojih GraphQL razrješivača i vaše Mongo baze podataka? Pomoću kojih alata? Kako pretvoriti svoju GraphQL shemu u Mongo projekcije? Hoćete li pisati konektore, koristiti DataLoader?
Ovdje je poanta: pisanje skalabilne aplikacije je teško. Vrlo teško. Ako želite učiti, onda dobro za vas. Jako mi je drago što koristim AUSK upravo iz tog razloga, jer radite stvari sami najbolji je način za učenje.
Zaključak: ne želite li riskirati?
I za AUSK i za Vulcan skalabilnost koda znači modularnu arhitekturu. Kad god kod postane previše složen ili nečitljiv, rješenje je jednostavno: izrežite ga na manje jednostavnije dijelove.
Vulkanska arhitektura je smjelija, sve može biti modularno. Ta ambicija riskira, ponekad je teško dobiti tko je što i kada registrirao.
AUSK modularni uzorci lakši su za čitanje, ali i nešto manje snažni. Na primjer, može biti teško dodati složene globalne značajke bez dodirivanja osnovnog koda paketa. Ipak, oni su definitivno dovoljni za većinu slučajeva korištenja, za pisanje dobrih aplikacija ne morate biti purist modularnosti.
# 6 Mobilni
Vulkan: s Kordovom
Meteor, na kojem se temelji Vulcan, ugrađuje Kordovu. Tako se vaša web aplikacija može povezati u mobilnu aplikaciju s jednim naredbenim retkom.
Međutim, Vulcan ne nudi alate za izvorne aplikacije. Naravno, još uvijek možete stvoriti neovisnu React Native aplikaciju i priključiti je na Vulcan. Poboljšanja sustava autorizacije (trenutno posljednji komad Vulcana koji se stvarno oslanja na Meteor) planiraju se u mjesecima koji dolaze kako bi se olakšale takve veze.
AUSK: s React Native
Kombinacija postavki za "vanilla" React i React Native jedna je od najboljih značajki AUSK-a. Napokon, to je Univerzalni početni komplet! Ni sam ne radim puno na mobilnim uređajima, ali ohrabruje činjenica da mogu brzo stvoriti izvornu mobilnu aplikaciju koja dijeli isti poslužitelj kao i moje web sučelje.
Zaključak: AUSK je bolji kod mobilnih uređaja
AUSK će biti prikladniji ako posebno trebate napisati mobilnu aplikaciju. Bez obzira na to, Vulcan omogućuje izradu mobilne aplikacije iz vašeg koda u samo jednom naredbenom retku, što je u redu ako vam je mobilna verzija sekundarnija.
# 7 Promjena korisničkog sučelja: težak problem
Stvaranje fullstack okvira koji omogućuje trenutnu promjenu UI biblioteke san je ostvaren samo tijekom ere CSS-a. Sjećate li se onih web stranica kojima je omogućeno prebacivanje teme klikom na jedan gumb?

Tada su napali narodi JS. Korištenjem React komponenata vrlo je teško pružiti takvu značajku (osim trivijalnih promjena boje), jer su stil i dizajn sada jako povezani s temeljnim komponentama React / Angular / Vue.
Svaka knjižnica React UI ima svoj način definiranja gumba, a da čak i ne govori o temi. To je problem za full-stack tehnologije poput AUSK-a i Vulcana, jer odabir okvira za oblikovanje stvar je ukusa. Ne mogu samo predložiti konačan izbor i prisiliti vas da ga se pridržavate. Bootstrap više nije monopol i svaki programer ima svoj omiljeni lib.
Da bi se pozabavili tim pitanjem, obojica imaju sličan pristup. S Bootstrapom su napisali kanonski skup komponenata, a zatim su pokušali omogućiti zamjenu tih komponenata drugim libom poput Ant Design ili Material UI.
Čini kod čudnim. Na primjer, AUSK Button će se color
podupirati, jer tako djeluje Bootstrap. Ako se prebacite na Ant Design, morat ćete upotrijebiti i rekvizit u boji, čak i ako Ant Design type
umjesto toga koristi rekvizit.
Budući da se odabir UI okvira obično događa samo jednom, obveza korištenja nekanonskog skupa rekvizita tijekom svih događanja čini se vrlo visokom cijenom za podršku višestrukog UI okvira.
Tijekom razvoja predlažem da što više izbjegavate koristiti te prethodno kodirane komponente za prilagođeno korisničko sučelje. Sjajno je izgraditi primjere i generičke značajke koje pruža okvirni okvir / okvir, ali ne toliko puno kada je u pitanju pisanje prilagođenih dijelova vaše aplikacije.
Umjesto toga upotrijebite osnovne komponente koje nudi Ant Design ili Bootstrap ili Material UI, ovisno o vašem izboru, i pokušajte napisati vlastiti lični prikaz UI. Možete potražiti Storybook da vam pomogne u procesu, jer je uključen i u AUSK i u Vulcan.
# 8 BESPLATNA BORBA
Ako bih zadržao diferencijalne značajke specifične za svaku od ovih tehnologija, one bi to bile.
Vulkan
Sustav sheme. Koliko mi je poznato, nijedan okvir ne može generirati strukturu baze podataka, ulazne točke poslužitelja, komunikacijski sloj klijent / poslužitelj i sučelje spremno za proizvodnju (obrasci, popisi itd.) Iz jedne JSON sheme.
Vulcan.js to može učiniti koristeći najnovije JS tehnologije.
AUSK
Nisam uspio odabrati samo jednu, pa bi mi drage značajke AUSK-a bile TypeScript i React Native.
Nekoliko se godina vode rasprave o prednostima statički upisanog JavaScript-a, hoće li se preferirati Flow ili TypeScript ... I TypeScript je definitivno pobijedio u borbi. Rad s TypeScriptom moguć je u Vulcanu, no zbog upotrebe Meteora trenutno se osjeća neprirodno, a kompilacija je spora. AUSK koristi TypeScript kao zadanu postavku i to je sjajno.
A React Native ... pa, postoje i oniraspravlja je li korištenje React-a za pisanje mobilnih aplikacija relevantno. Možete se odlučiti držati se responzivne web-aplikacije, ali barem znate da je sve postavljeno za vas, s obzirom na to da konfiguriranje razvojnog programa za React Native nije uvijek lak zadatak.
Pa, jeste li odabrali?
Toliko je točaka koje treba uzeti u obzir, poput performansi, sigurnosti, DevOps-a, upravljanja autorizacijom ... Odabir pravog alata za izgradnju vaše JavaScript aplikacije sigurno nije lak izbor. Nadam se da ste vam ovaj članak pružio dragocjene uvide koji će vam pomoći u ovoj odluci.
Ako se i dalje osjećate neodlučno, javite mi se na Vulcan's Slack, bilo bi mi drago da im odgovorim :)
Također možete uputiti bilo koje pitanje na AUSK-u Viktoru Vlasenku i njegovom timu na SysGearsu, te se pridružiti Vulcanovom posvećenom Slacku za pristup zajednici Vulcan.
Moj posljednji savjet bit će tako jednostavan: pokušajte i Vulcan i AUSK, vrijedni su vašeg vremena!
Hvala Sacha Greifu i Victoru Vlasenku na recenziji ovog članka.

Suosnivač sam francuske tvrtke Lebrun Burel Knowledge Engineering (LBKE) - //www.lbke.fr
Uvijek rado razgovaramo o kodu, strojnom učenju, inovacijama i poduzetništvu!