欢迎!请参阅关于页面,了解更多关于如何使用本网站的信息。
这感觉像是一个相当基础的项目配置问题。我只是想从专家那里学习并获取一些并行开发库的最佳想法。
我写了大量的Clojure小程序和脚本,它们自然有很多小助手函数。当你编写主脚本/应用程序时,你最终会调整这些辅助函数,涵盖你暴露出的新角落案例等。但是这些辅助函数最终被乱七八糟地复制到脚本和应用程序之间。例如,转换格式或绘制图表等函数。显然这不是理想的做法!
我想将这些独立的辅助函数拆分到它们自己的迷你库中
我见过的一种工作流程是“monorepo”配置。这是由thing/geom使用的。然而我认为从长远来看,这已经证明是有问题的,因为Karsten Schmidt最终有大量非常棒的功能……但它们都封装在单体仓库中。他在那里有一个整个矩阵库,以及用于处理3D几何等的渲染器和其他工具。但我猜测这是一个可发现性问题,也许人们不想为了访问某个角落的一个工具而拉取全套“厨房用具”
因此,我正在尝试找到一种更漂亮的deps.edn方法,但我并不真正理解语言设计师预期的流程。
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)
假设你有两个项目:app和libapp使用lib中的几个函数你大部分时间都在开发app,但有时你需要在lib中更改某些东西。
在app/deps.edn中,你可以添加一个profile:dev-local,并使用:override-deps:{lib/lib {:local/root "../lib"}}
然后你可以仅通过保存文件,重新加载lib和app中的所有函数,而无需重启repl。
一些编辑器,如cursive,"理解"这种设置,并为你做一些酷的事情,比如跳转到定义。
经过一番头脑风暴...
选项1:有两个deps.edn文件。一个供你自己使用,一个供其他人使用。这并不理想,因为你实际上只会测试你本地的那个:)
选项2:有一个本地别名,它通过:override-deps键覆盖依赖。请参阅https://clojure.org/guides/deps_and_cli#override_deps。问题与选项1类似,即你不强制同步远程和本地版本,因为它们不需要在同一hash上。
:override-deps
选项3:仅使用远程控制台,将所有微小的更改推送到那里,并持续更新SHA哈希值。这有点繁琐,因为你需要不断地推送和更新哈希值。此外,通过推送未完成的破损事物,你也会暴露你的“烂衣服”。
更全面地思考这个问题,实际上我不知道如何进行改进。唯一的微小的用户体验改进可能是,如果你可以指定一个依赖和SHA,然后有多个回退源。这样,首先有本地目录,然后是远程(GitHub)目录.. 这样,本地和远程必须在相同的SHA上保持同步。但从某种意义上讲,这仅仅是没有额外推送的选项3。
唯一万无一失的方法是使用外部守护进程自动更新哈希值 - 但...这有点令人反胃 :)