我想找到一种方式,使用 clojure -X
调用一个 nREPL 服务器,并在单独的别名中指定额外的依赖项和中间件,然后将这些依赖项在命令行上组合在一起。
背景说明:nREPL 中间件是作为一组函数或运行时解析的符号指定的,因此对于每个别名在 deps.edn 中指定它们的自己的中间件向量并按命令行上别名列表的顺序连接它们可能是一个理想的机制。(下面有具体演示的例子)
不幸的是,我没有找到一种令人满意的方式通过 clojure CLI 实现,问题在于来自不同别名的 :exec-args
映射被简单合并,后者的值会覆盖前者。clojure.org 参考中提到了深层合并,但这似乎是一个文档错误。
(请注意,广泛使用 -M
的这个用例并没有提供任何方法来组合命令行字符串参数,迫使每个别名将所有中间件和依赖项耦合在一起。)
当然,不存在一些合并 exec-arg
值的神奇集合语义(向量 => 连接,映射 => 合并等)... 尽管如此,这里可能存在一个可用性缺口要填补,让用户能够声明性地指定自己的合并语义,而不是求助于自定义编写的任务运行器。
以下是如何在命令行中看起来,假设 :middleware
参数具有 concat
语义
$ clojure -X:nrepl
Starting nREPL server with: nil
$ clojure -X:nrepl :port 1234
Starting nREPL server with: {:port 1234}
$ clojure -X:cider:nrepl :port 5678
Starting nREPL server with: {:port 5678 :middleware [cider.nrepl/cider-middleware]}
$ clojure -X:portal:cider:nrepl
Starting nREPL server with: {:middleware [portal.nrepl/wrap-portal, cider.nrepl/cider-middleware]}
$ clojure -X:cider:cljr:portal:nrepl
Starting nREPL server with: {:middleware [cider.nrepl/cider-middleware, refactor-nrepl.middleware/wrap-refactor, portal.nrepl/wrap-portal]}
在 Slack 线索中查看更多上下文
https://clojurians.slack.com/archives/C6QH853H8/p1711461045176759