我正在考虑为 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
映射中指定。或者通过命名空间或 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
辅助程序?我没有找到它。