This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-11-29
Channels
- # adventofcode (1)
- # announcements (2)
- # beginners (163)
- # biff (3)
- # calva (19)
- # cider (56)
- # cljs-dev (5)
- # clojure (43)
- # clojure-belgium (2)
- # clojure-europe (47)
- # clojure-norway (32)
- # clojure-uk (2)
- # clojurescript (24)
- # datomic (5)
- # events (1)
- # fulcro (2)
- # hoplon (11)
- # hyperfiddle (12)
- # jobs (1)
- # lsp (15)
- # malli (7)
- # music (1)
- # polylith (2)
- # re-frame (7)
- # reagent (7)
- # shadow-cljs (25)
- # specter (9)
- # squint (16)
- # xtdb (5)
jo mere jeg tenker på “use server”, jo kulere synes jeg det er… Hvis man bare glemmer hvordan “JS-folk” ofte organiserer kode, og kritikken rundt å gjøre side effects fra render, så er det egentlig bare kode-organisering. Du kan fint gjøre all fetching et eget sted, ha all state på toppen, osv, i react/next. Og om du har det, er det jo ganske awesome å slippe å “manuelt” lage et API-lag, og du bare kan lage funksjoner i en egen mappe som next/vercel automatisk bygger til serverless lambdas som du kan kalle som en hvilken som helst annen async funksjon i state-håndteringa di
For å skjønne mer om hvorfor de kule kidsa om dagen liker Remix/Next så holder jeg på å lage en side med Remix hostet på Cloudflare, og kan til en viss grad forstå entusiasmen din. Det går fort å få opp noe "som virker", men det følger med en god del kompleksitet på lasset. Har f.eks akkurat skjært tenner når jeg skulle sette opp noe så enkelt som sesjonshåndtering med Cookies i Remix. Det funka ikke på Cloudflare fordi deres runtime ikke var helt node-kompatibelt. Så da må man inn og skrive sin egen sesjonshåndterer i Remix
Jeg har jobbet nok med rammeverk til å vite det jeg trenger å vite om "use server", og det skaper ingen entusiasme for meg.
Det eneste som går fortere er som @U0PS4MS80 sier å komme igang. Det er rimelig uinteressant å optimalisere for ass.
f.eks litt digg å lage en ny route ved å bare putte ei fil som heter minNyeRoute.ts i routes-mappa
kunne vært interessant å undersøke hvordan man kunne fått til noe lignende for clj(s) i biblioteks-form. I praksis ender man jo opp med helt “plain” js-filer som har funksjoner som bruker env vars, tar imot js-data og returnerer js-data. Så slipper du å navngi paths i API-et, deployment av front-end følger deployment av back-end 1:1, osv osv
@U0MKRS1FX sånn, BFF-rammeverk for clojure?
hmm ja kanskje, på sett og vis (sier jeg, etter å ha skumlest om BFF). Om alt du har er én klient og én backend så har det vel ikke så mye å si hva man kaller patternet, siden det er 1:1 uansett i det tilfellet
@U0MKRS1FX kanskje det jeg tenkte mest på var at det APIet du får autogenerert er spesialsydd for frontenden din (typisk)
det fine er jo at selve implementasjonen som nevnt ender opp som helt plain funksjoner som bruker env vars. Så det er nokså portabelt om man skulle ønske å deploye det på andre vis senere
ja riktig, i den grad man kan kalle det autogenerert - du skriver jo koden selv, så det “eneste” man slipper å gjøre er å manuelt pakke det inn i URL-routes (byggesteget gjør det for deg) og deploye det separat
har eksperimentert litt med next + vercel sin “use server”, og namespacene med “use server” ender opp med å vite null og niks om next + vercel
kan man snu på det? Hva er verdien av å skille på deployment av frontend og backend når koden i praksis er 1:1?
i mitt tilfelle er “use server” noe jeg putter i toppen av separate backend-filer, ikke noe jeg putter inni handler-kode embedda i rendringen. Så for meg oppleves hovedforskjellen som at jeg kan kalle const res = await myBackendFunction()
direkte der jeg gjør I/O, i stedet for å kalle const res = await fetch("/my_backend_function")
og deploye den separat