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

欢迎!请参阅 关于 页面了解有关如何使用本服务的更多信息。

+1
工具.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 函数之后期望 key/value 对。因此,它可能需要像这样的形式

clj -Tshadow-cljs watch :build :app

目前,这所有的东西都可以通过传统的使用 clojure.main 的方式实现

 clj -M:shadow-cljs watch app

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

我可以想出许多让工具退出此行为的方法。比如,直接在它们的 deps.edn:tools/usage map 中指定。或者通过命名空间或 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 的一种好方法。
...