i den här guiden beskriver jag de tillgängliga webbramalternativen för Clojure och ger mina rekommendationer.
rulla din egen stack från Rekommenderade bibliotek (kommer snart) om du bara lär dig. Det blir det bästa sättet att förstå hur allt fungerar.
använd piedestal om du vill ha en produktionstestad grund för att bygga din applikation.
använd Luminus om du vill ha flexibiliteten att rulla din egen stack utan arbetet.
- introduktion
- Vad är (och inte är) ett webbramverk
- Rekommendationskriterier
- dokumentation
- gemenskap
- löptid
- webbstandarder
- tillvägagångssätt
- distribution
- rekommenderas starkt
- piedestal (GitHub)
- Luminus (GitHub)
- andra ramverk av anmärkning
- Fulcro (GitHub)
- kanal
- Tadam
- kust på Clojure (GitHub)
- Hoplon (GitHub)
- rekommenderas inte
- inte ramar
introduktion
en fråga som jag ställs mycket av nybörjare i Clojure är ”vilket webbramverk ska jag använda?”Det här är en bra fråga. I Python finns det Django. I PHP, Drupal. Och naturligtvis i Ruby, det finns kungen av alla webbramar, Ruby on Rails. Men i Clojure är det här en svår fråga att svara på. Även att bestämma vad som är ett ramverk och vad som är ett bibliotek kan vara svårt. Vi måste ta itu med det först.
Vad är (och inte är) ett webbramverk
i den här guiden kommer vi att definiera ett webbramverk som en samling kod och beroenden som ger en helhetssyn för att bygga en webbapplikation. Denna definition utesluter flera bibliotek som vanligtvis kallas ramar, som Compojure och Ring, eftersom de inte i sig ger dig ett tillvägagångssätt. Det finns dock fortfarande flera stora utmanare som jag anser här.
eftersom att rulla din egen stack är ett vanligt alternativ i Clojure till att använda en förbyggd ram, och det kan betraktas som en helhetssyn (nämligen bygga din applikation från befintliga bibliotek), anser jag det också i rekommendationerna.
Rekommendationskriterier
syftet med denna guide är att ge starka rekommendationer för webbramar för olika behov. Här är kriterierna jag undersöker om varje ramverk:
dokumentation
har ramverket lätt att följa dokumentation? Jag letar efter nybörjarhandledning genom avancerade ämnen.
gemenskap
en stor, aktiv gemenskap är en viktig del av ett ramverk lönsamhet. Ett stort samhälle kan lättare tillhandahålla, hålla beroenden uppdaterade och bygga en mer komplett lösning.
löptid
ett projekts ålder och hur länge det har använts i produktion på storskaliga platser är en annan viktig faktor. Jag föredrar äldre ramar som har distribuerats för betydande webbplatser.
webbstandarder
förutom de tre stora webbspråken (HTML, CSS och JavaScript) finns standarderna för själva HTTP-protokollet och en mängd ”bästa praxis”. Jag pratar om HTTP-svarskoder, innehållsförhandlingar, CORS, WebSockets, etc. Hur använder ramverket dessa standarder? Hur kränker det dem?
tillvägagångssätt
eftersom ett ramverk måste ge en helhetssyn måste själva tillvägagångssättet beaktas. Hur bygger ramverket en applikation?
distribution
när din applikation är klar måste den distribueras. Vilka distributionsalternativ finns tillgängliga? En bredare variation är bättre.
rekommenderas starkt
det känns konstigt för mig att säga detta, men det bästa alternativet för nybörjare är fortfarande att rulla din egen. Att rulla din egen stack är inte så svårt som det kan tyckas. Du kan göra bygga en funktionell stack från en handfull bibliotek. Ganska ofta, de mer robusta, byggd för dig ramar har gjort hundratals beslut för dig om hur man bygger stacken, men de fortfarande kräver att du förstår legion Bibliotek de valde.
förutom att vara bra för lärande, ger rolling your own dig fullständig kontroll för att stödja eller inte stödja en viss funktion.
den största nackdelen är att du måste fatta många beslut för dig själv. Det finns många bibliotek där ute och att välja bland dem kan vara ett svårt förslag. En tröst är att när du sätter ihop dina egna bibliotek, åtminstone i Clojure, är det relativt enkelt att byta bibliotek om du tycker att man inte fungerar för dig.
när du vill ha en mer komplett lösning (och du kommer), om du fortsätter att bygga den själv, kommer du fram till något som är väldigt mycket som de mer robusta ramarna. Jag skulle rekommendera att byta till en av de andra rekommenderade lösningarna snarare än att bygga din egen kompletta ram. Lyckligtvis är det enkelt att byta mellan dem eftersom de alla arbetar med Ringstandarden.
piedestal (GitHub)
piedestal är en mogen uppsättning bibliotek, ursprungligen skapad av Cognitect, för att utveckla moderna, strömmande webbapplikationer. Den är uppbyggd kring långlivade anslutningar som gör att du kan strömma data från servern till klienten över tiden. För att stödja den funktionen uppfann Pedestal tanken på interceptorer, vilket ger dig ett sätt att definiera rörledningar av asynkrona steg som din begäran går igenom.
jag rekommenderar Pedestal eftersom det är moget, har ett aktivt samhälle, Det stöder ett stort antal distributionsalternativ och det har bra stöd för webbapplikationer. De två knockarna mot det är dess dokumentation och dess brist på en förenande strategi. Den har några guider som tar dig igenom grundläggande Hej, värld! ansökan. Men jag har inte hittat något som kommer att förklara hur en fullständig ansökan ska sättas ihop. Tillvägagångssättet piedestal underlättar är att ge låg nivå grunden du behöver, som en piedestal som att stå lite högre än att börja om från början. För att vara säker, att grunden är viktigt, men en hel del är kvar till utvecklaren att välja och bygga själva. Till exempel har den målmedvetet inte en HTML-malllösning. Det kallar det ”API-först”. Jag förväntar mig att ett komplett webbramverk har en lösning för att skapa HTML.
trots dessa problem rekommenderar jag piedestal som en solid och flexibel grund för att bygga applikationer.
Luminus (GitHub)
Luminus är i huvudsak ett mallprojekt. Du skapar en ny webbapplikation från den mallen, och allt är konfigurerat för dig. Luminus ger dig några alternativ för mallen, men i allmänhet är dess tillvägagångssätt att göra valen åt dig—ibland tillhandahålla egna bibliotek och ibland använda befintliga bibliotek. När projektet skapas, kommer du att ha en komplett webbstack som är din att bygga vidare på eller ändra som du tycker passar. Den största fördelen är den enhetliga visionen som styrde bibliotekens val.
Luminus syftar till att ge allt du behöver för att skriva webbapplikationer. Du får allt från rutter, till sessionshantering, till clojurescript-kompilering, till databasmigreringar. Allt kommer förkonfigurerat, så att du kan komma igång med din applikationslogik direkt. Tänk på Luminous som uppsättningen bibliotek och konfigurationer du skulle bygga själv över 10 års arbete med en applikation. Du kanske inte behöver det först, men så småningom vill du ha säkerhet, loggning, internationalisering, bland andra problem. Luminus ger det till dig med ett kommando.
den största nackdelen med Luminus är att många av biblioteken exponeras direkt. Ja, det ger Dig möjlighet att konfigurera dem som du vill. Men det betyder också att du har mycket att förstå om du vill bygga på standardbeteendet. Lyckligtvis är dokumentationshistorien utmärkt. Det finns till och med en bok som dokumenterar det rekommenderade sättet att bygga en webbapplikation med Luminus.
dessutom har det funnits i flera år, distribuerats för stora applikationer och har en mängd olika distributionsalternativ.
andra ramverk av anmärkning
dessa ramar är intressanta för deras innovativa tillvägagångssätt.
Fulcro (GitHub)
Fulcro är en fullstack-lösning. Den använder React på frontend, men den har en komplett datamodell från klient till databas. Om den typen av förenande vision är tilltalande, prova. Det finns utmärkt dokumentation och den är fortfarande aktivt utvecklad.
kanal
kanal är en leiningmall som närmar sig att bygga en webbapplikation som en uppsättning konfigurationer. Till exempel, i Kanal, routing är en konfiguration. Migration är en konfiguration. Med hjälp av detta förenande, dataorienterade tillvägagångssätt bygger du en webbapplikation som kan laddas om deterministiskt. Ramverket verkar få dragkraft.
Tadam
Tadam har konfigurerat ett antal befintliga bibliotek och skapat en standardkatalogstruktur för att göra det enkelt att skriva enkla webbplatser. Det är fortfarande nytt men aktivt.
kust på Clojure (GitHub)
kust på Clojure ger dig en fullständig lösning (databas till servering HTML) samtidigt som man fokuserar på att hålla det enkelt.
Hoplon (GitHub)
Hoplon är en fullstack-lösning med ett intressant tillvägagångssätt. Frontend-delen sammanställer ClojureScript och låter dig bygga interaktiva komponenter som använder en kalkylarkliknande dataflödesmodell. Den kan ansluta till backend genom att ringa funktioner som är fullmakter av funktioner på servern. Detta gör att du kan kringgå hela routing situationen. Utvecklingen på den är långsam.
rekommenderas inte
dessa ramar rekommenderas inte eftersom de inte har utvecklats aktivt för länge och aldrig fått tillräckligt med dragkraft. Jag har inte utvärderat dem på tekniska meriter eftersom jag inte skulle rekommendera dem baserat på deras inaktiva utveckling ensam.
- webnf
- Clojure på spolar
- joodoo
- Datsys
inte ramar
dessa projekt kallas ofta ramar men de uppfyller inte definitionen av ”tillhandahålla en helhetssyn för att bygga en webbapplikation”. Jag har inte utvärderat dem här.