我正在寻找一种方法,使用 clojure -X
来调用 nREPL 服务器,并在不同的别名中指定额外的依赖项和中间件,这些依赖项和中间件将在命令行中组合在一起。
背景信息:nREPL 中间件被指定为一组函数/运行时解析的符号列表,所以理想情况下,每个 alias 在 deps.edn 中都应该有一种机制来指定它们自己的中间件向量,并且按照命令行中 alias 的顺序将它们连接起来。(下文将具体演示此方法)
不幸的是,我发现无法通过 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