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

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

+1
in tools.deps by

我正在考虑为 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 辅助程序?我没有找到它。

1 个答案

+1

选中
 
最佳答案

我们计划不将任何参数解析设置为可选 - `-X` 和 `-T` 执行具有观点,不订阅此设置的工具有权使用 `-M -m`,这会为您提供对参数解析的完全控制。

Clojure CLI中注入了clojure.run.exec命名空间(代码本身位于brew-install仓库中)。由于其一直在进化中,并且尚未承诺公开API,因此它不易对外部使用(有意识地)。我预期最终它将可用,要么在Clojure库本身中(这将使其类似于clojure.main)或作为单独的小程序库。

对我来说很不幸,但这可能是为用户提供某种一致API的好方法。
...