This feels like a rather basic project setup issue. I just wanted to learn from the gurus and get some ideas for the best way to develop libraries in tandem
I write a lot of little programs and scripts in Clojure and those naturally have lots of little helper functions. As you write your main script/application you end up tweaking the helpers, covering new corner cases you expose etc. But these helper functions end up being copied around haphazardly between scripts and apps. Things like functions that convert formats or make plots etc. Obviously this isn't ideal!
I'd like to split these independent helper functions off into their own mini libraries
One workflow that I've seen is the "monorepo" setup. This is the design used by thing/geom. However I think long term this has proven to be a bit problematic b/c Karsten Schmidt ended up having a whole ton of awesome features.. but they're all wrapped up and hidden away in the mono repo. He has a whole matrix library there, and renderers and things for working with 3D geometry etc. etc. But I'm guessing there is a discoverability issue and maybe people don't wanna have to pull in the whole kitchen sink to access one tool in some corner
Instead I'm trying to find a nice
deps.edn way of doing this but I don't really get what the language designers' expected workflow is.
There is a way to work with local repos: https://clojure.org/guides/deps_and_cli#_using_local_libraries
And then there is a way to work with remote repos: https://clojure.org/guides/deps_and_cli#_using_git_libraries (or you can work with Maven repos)
But how do you do both at once..? I obviously need to tweak and add features to the libraries as I work on the application :) Should I have a local development
deps.edn that points at local folders and then another
deps.edn with remote repos to distribute? (If so, what's the best way to set that up with Cider?)
Or can I have one
deps.edn that looks locally and then falls back to remote repos if it doesn't find anything?
Or maybe there is a better alternative I haven't considered?
Just wondering how people are handling this
(Also posted here: https://clojureverse.org/t/how-to-developing-multiple-libraries-applications-simultaneously/8660)