2024Clojure 状态调查! 中分享你的想法。

欢迎!请参阅关于页面,了解更多关于如何使用本网站的信息。

+2
Clojure

这感觉像是一个相当基础的项目配置问题。我只是想从专家那里学习并获取一些并行开发库的最佳想法。

我写了大量的Clojure小程序和脚本,它们自然有很多小助手函数。当你编写主脚本/应用程序时,你最终会调整这些辅助函数,涵盖你暴露出的新角落案例等。但是这些辅助函数最终被乱七八糟地复制到脚本和应用程序之间。例如,转换格式或绘制图表等函数。显然这不是理想的做法!

我想将这些独立的辅助函数拆分到它们自己的迷你库中

我见过的一种工作流程是“monorepo”配置。这是由thing/geom使用的。然而我认为从长远来看,这已经证明是有问题的,因为Karsten Schmidt最终有大量非常棒的功能……但它们都封装在单体仓库中。他在那里有一个整个矩阵库,以及用于处理3D几何等的渲染器和其他工具。但我猜测这是一个可发现性问题,也许人们不想为了访问某个角落的一个工具而拉取全套“厨房用具”

因此,我正在尝试找到一种更漂亮的deps.edn方法,但我并不真正理解语言设计师预期的流程。

有一种方法可以处理本地仓库:https://clojure.org/guides/deps_and_cli#_using_local_libraries
还有一种方法是处理远程仓库:https://clojure.org/guides/deps_and_cli#_using_git_libraries(或者你可以与Maven仓库一起工作)

但是如何同时进行这两件事?显然,我需要在我处理应用程序时调整和添加库的功能。我是否应该有一个指向本地文件夹的本地开发deps.edn,然后另一个带有远程仓库的deps.edn用于分发?(如果是这样,如何使用Cider设置?)

或者我是否可以有一个本地查找并随后回退到远程仓库的deps.edn

或者也许有我还没有考虑到的更好的替代方案?

只是想了解人们是如何处理这个问题的

(另外发布在这里:https://clojureverse.org/t/how-to-developing-multiple-libraries-applications-simultaneously/8660

2 个答案

+1
 
最佳答案

假设你有两个项目:app和lib
app使用lib中的几个函数
你大部分时间都在开发app,但有时你需要在lib中更改某些东西。

在app/deps.edn中,你可以添加一个profile:dev-local,并使用:override-deps:{lib/lib {:local/root "../lib"}}

然后你可以仅通过保存文件,重新加载lib和app中的所有函数,而无需重启repl。

一些编辑器,如cursive,"理解"这种设置,并为你做一些酷的事情,比如跳转到定义。

谢谢。是的 - 我认为这是一个非常好的可行方案。只需将更新推送到线上,并确保你的本地库版本与远程库版本一致。
0

经过一番头脑风暴...

选项1:有两个deps.edn文件。一个供你自己使用,一个供其他人使用。这并不理想,因为你实际上只会测试你本地的那个:)

选项2:有一个本地别名,它通过:override-deps键覆盖依赖。请参阅https://clojure.org/guides/deps_and_cli#override_deps。问题与选项1类似,即你不强制同步远程和本地版本,因为它们不需要在同一hash上。

选项3:仅使用远程控制台,将所有微小的更改推送到那里,并持续更新SHA哈希值。这有点繁琐,因为你需要不断地推送和更新哈希值。此外,通过推送未完成的破损事物,你也会暴露你的“烂衣服”。

更全面地思考这个问题,实际上我不知道如何进行改进。唯一的微小的用户体验改进可能是,如果你可以指定一个依赖和SHA,然后有多个回退源。这样,首先有本地目录,然后是远程(GitHub)目录.. 这样,本地和远程必须在相同的SHA上保持同步。但从某种意义上讲,这仅仅是没有额外推送的选项3。

唯一万无一失的方法是使用外部守护进程自动更新哈希值 - 但...这有点令人反胃 :)

...