我在考虑为 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
助手属于哪个库?我找不到它。