我正在 Clojure 中编写一个名为OneCLI的 CLI 框架。该框架的主要中心部分是一个名为的函数go!,它“为您”解析命令行、环境变量和配置文件,并根据这些输入中提供的内容运行几个不同的用户提供的函数之一。
通常,go!从-main用户调用 Clojure 程序的函数中调用。我用我自己的库,例如,在另一个叫“uberjar”风格应用ZIC。该函数作为其运行的一部分进行go!调用System/exit,并向其传递来自用户提供的函数结果的退出代码。这在“生产中”效果很好,但这也意味着我无法zic.cli/-main从 REPL运行该函数,因为每当我调用它时System/exit并且 REPL 退出时。
在你问之前,在树莓派上开发时从 REPL 运行它可以避免昂贵的 45 秒运行lein uberjar/1 分 30 秒运行clj -X:depstar uberjar :jar ...。
我的问题是:是否有一些 var 或 value 我可以检查作为 Clojure 标准库的一部分,告诉我的 OneCLI 代码它是从 REPL 运行还是从 JAR 运行?
这样的变量将使我能够在 OneCLI 中检测到我们正在从 REPL 运行,以便它可以避免调用System/exit.
我们的团队正在处理使用 deps.edn 的 Clojure 项目
我们习惯于 NPM 项目,将版本号存储在 package.json 文件中。看来 Leiningen 用户之前可能已将版本号存储在 project.clj 文件中。是否有针对 Clojure 项目版本控制的社区范围惯例?我看到人们和官方文档提到使用 Git 标签,但想知道使用 deps.edn 的开发人员是否有某种流行的方式将版本号存储在文件中。
谢谢你!