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

欢迎!请参阅关于页面以获取更多关于这个如何工作的信息。

+1
tools.deps

我正在考虑为 shadow-cljs 编写一个 deps.edn 工具实现。主要是因为 clj -Ttools install-latest 可以轻松安装。类似于 npm install shadow-cljs,尽管我并没有打算取代它。只是提供另一种选择。

但是,我完全不同意预设参数解析的功能,我希望可以取消选择这一功能。这已经考虑过了吗?

所有工具都通过 clojure map 来调用。然而,工具已经存在并具有自己的参数解析。我希望避免需要调整所有现有的文档,并总是提到两种调用方式。

例如,目前您最常运行的命令是

npx shadow-cljs watch app

或者,翻译成我想为工具使用的样子

clj -Tshadow-cljs watch app

我认为这是无效的,因为它在 watch 函数后期望键值对。所以它可能需要像这样的东西

clj -Tshadow-cljs watch :build :app

目前这可以通过使用 clojure.main 的传统方式实现

 clj -M:shadow-cljs watch app

但这需要创建别名并手动指定 :main-opts。它也无法真正利用 -Tinstall-latest

我想到了很多让工具选择退出这种行为的办法。无论是通过在它们的 deps.edn:tools/usage 映射中直接指定,还是通过在命名空间或 vars 上的 CLJ 元数据直接实现,因为工具已经解析了这些。

(ns my.tool
   {:tools/usage {:parse-args false}}
   ...)

;; and/or

(defn watch
   {:tools/usage {:parse-args false}}
   [& args] ;; just the usual strings array
   ...)

我觉得这个问题以前讨论过,但我找不到。另外,clojure.run.exec 助手属于哪个库?我找不到它。

1 个答案

+1
回答者
选择了 选择者
 
最佳回答

我们计划不将任何参数解析设置为可选 - -X 和 -T 执行有多种观点,不赞同这种观点的工具可以使用 -M -m,这会为你提供对参数解析的全权控制。

clojure.run.exec ns 被注入到 Clojure CLI 中(代码本身在 brew-install 仓库中)。它不容易对外使用(某种程度上是有意为之),因为我们一直在逐步完善它,并尚未为公共 API 做出公开承诺。但我确实预计最终它将会公开,可能是作为 Clojure 库本身(这与 clojure.main 类似)或作为一个独立的迷你库。

评论者
对我来说可能很不幸,但对用户来说可能是一个好主意,提供一种某种一致的 API。
...