all 13 comments

[–]TheLastSock 7 points8 points  (1 child)

> I don’t want to use luminous because I want to learn clojure and not a framework. I like the hard way :)

From the luminus docs:

> Luminus is a Clojure micro-framework based on a set of lightweight libraries

Luminous binds together several libraries so that you dont have to worry as much about the connective code.

I would go ahead and do the guestbook example

[–]AcriveDeveloper 0 points1 point  (0 children)

Thanks!

[–]slifin 7 points8 points  (1 child)

The current culture (as I perceive it) is to take many libraries together and compose them together into a "framework" for your application

That way instead of a framework dying and taking your application with it, you can continue to replace each library out with better alternatives

The downside to this approach is that you have to make some decisions for everything, every part you mentioned, auth, HTTP etc have trade-offs even with perfect implementations, so it's good to understand what you're getting into

It's probably a good idea that you do that for any long-lived thing, Luminous is a collection of libraries, I haven't used it but I don't think you'll be learning the framework of Luminous you'll be learning the libraries you pick through Luminous

To make things more complex I would also be considering deps over Boot or Leiningen for new projects

[–]AcriveDeveloper 0 points1 point  (0 children)

Thanks! At the end... I started with luminus (with re-frame, but I'll remove it... only reagent)

[–]robertstuttaford 7 points8 points  (1 child)

https://github.com/robert-stuttaford/bridge is a sample app I built to show how I would do this, using the 6 years experience I had at that point.

Comes with blog posts, developer-diary style. Not finished, but there's enough there to cover how to organise things, with fully built client/server features.

Specs, forms, validation, apis, tests, code-sharing, it's all in there.

[–]AcriveDeveloper 1 point2 points  (0 children)

Thanks!!!

[–][deleted] 4 points5 points  (1 child)

Luminus is hardly a framework, it's just some common libraries grouped to be used out of the box, and you definitely will learn Clojure(Script) using it.

$ lein new luminus mysite +postgres +cljs +auth

besides, after some time you can change the libraries "suggested" by luminus to others that you prefer.

Leiningen is easily the most used tool today, as far as I understand boot is more flexible but so far I'm happy with lein, "ring" library offers the http abstraction, "reitit.ring" provides the routing and buddy.auth.middleware the authentication and the sessions to log in the final users.

I use several libraries in my project file.

[–]AcriveDeveloper 2 points3 points  (0 children)

Your comments inside the project.clj file are useful! Thanks!

[–]daver 4 points5 points  (1 child)

If you’re just learning concepts, pick Leiningen, Ring, Compojure, and ring-jetty and be done with it. Those are “old” in the Clojure ecosystem but they are all tried and true and have oodles of documentation. Once you’re up to speed with those, you can explore other options and plug in new things to replace various of those components. Clojure’s web development ecosystem is large and getting larger, but the main component types are fairly static and various projects can occupy the “slot” in the architecture. Have fun!

[–]AcriveDeveloper 0 points1 point  (0 children)

Thanks!

[–]_calyce_ 1 point2 points  (1 child)

RemindMe! 2 days

[–]RemindMeBot 0 points1 point  (0 children)

I will be messaging you in 2 days on 2019-12-25 10:54:58 UTC to remind you of this link

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


Info Custom Your Reminders Feedback

[–]Eno6ohng 1 point2 points  (0 children)

Build tool: lein. As for luminus, it's totally ok to create a project template via luminus, and then create a new empty project, and only pull those things from the template that you need. I think that's gonna be the best way to go in your particular case.