clojure - 何时在 Clojure CLI 中使用 -M、-A 或 -X?
问题描述
我一直在使用 -A 和 clojure 工具,但是一些警告说我应该使用 -M 代替,我找到了这个 doc,但还没有得出什么时候使用每个的结论。
解决方案
Clojure CLI 仍在不断发展,因此该-X
选项相对较新,并且该-M
选项的含义在同一时间范围内发生了变化。
您可以在此处查看 CLI 版本和简短的发行说明:https ://clojure.org/releases/tools
直到 2020 年年中,你什么都用上-A
了。-M
只需运行:main-opts
-- 它不尊重任何类路径选项或解析选项。
在版本 1.10.1.697(2020 年 9 月 25 日)中,-X
引入了该选项以允许执行特定的 Clojure 函数,将数据的哈希映射作为单个参数传递。该版本还扩展了-M
尊重:extra-paths
和:extra-deps
运行选项的行为:main-opts
- 有效地-M
等同于-A
.
这些选项的工作方式和 CLI 的整体行为方式发生了相当多的变化,直到大约一个月后的 1.10.1.727(2020 年 10 月 21 日)稳定下来。在此期间,该-A
选项的运行行为已:main-opts
被有效弃用:如果您现在使用-A
to run :main-opts
,则会收到一条警告,建议您-M
改用该选项。
几个基于 Clojure CLI 的社区工具,并deps.edn
在其 README 中注明您需要至少使用 1.10.1.727 版本才能利用它们的功能。版本 1.10.3.814 是当前版本(截至 2021 年 3 月 16 日)。由于 CLI 添加了新功能,因此值得保持更新(并且可能很快会进行另一轮更改)。
所有这一切的 TL;DR 是:
- 用于
-M
runclojure.main
和 any——:main-opts
这包括-m
标识一个命名空间,其-main
函数应该被执行,也-e
包括评估一个表达式。请注意,这-main
是一个使用零个或多个参数调用的可变参数函数String
。 - 用于
-X
运行特定函数,将单个哈希映射作为其参数,除了 in 之外,还通过命令行传入键/值:exec-args
对deps.edn
。请注意,-X
接受 EDN 值,这意味着需要在命令行上仔细引用字符串:'"A string"'
-- 双引号用于 EDN 字符串,单引号用于确保值通过 shell 按原样传递。在 Windows、viacmd.exe
或 Powershell 上,引用比这更复杂(在 Linux 和 macOS 上使用 Clojure CLI 要容易得多,因此对于 Windows,值得考虑 WSL2)。 - 用于
-A
启动 REPL。目前,这意味着您需要小心:main-opts
与启动 REPL 时使用的别名混合(因为-A
仍然运行:main-opts
但在某些时候它会停止这样做)。
现在另一个有用的选项是-P
--prepare -- 您可以在clojure
(之前-X
、-M
或-A
)之后立即添加它,它允许 CLI 计算和解析来自deps.edn
文件和提供的别名的所有依赖项(并下载 Maven/Clojars JAR 和clone git deps),但在实际执行函数之前停止(特定函数 for -X
,clojure.main
for-M
或 REPL for -A
)。
关于版本的最后一点说明:虽然 CLI 版本号以 Clojure 版本号为前缀,但它们并没有直接关联。您可以使用任何版本的 CLI 运行任何版本的 Clojure(回到 1.0.0)。CLI 的版本号是Clojure的默认版本,如果您不通过别名或项目文件覆盖它,您将x.y.z.commits
在哪里获得它。x.y.z
deps.edn
推荐阅读
- c++ - 将带有字母A的单词附加到文件文本c ++的问题
- reactjs - 如何检测何时在本机反应中设置了全局变量
- vb.net - 对非共享成员的引用需要用于显示/隐藏表单的对象引用
- android-studio - 单击按钮时如何打开底部导航的第三项
- unix - 如何在 unix 中使用 vi 或 vim 对第一行进行排序而不根据准备时间对其进行排序?
- html - 响应表引导没有在另一个引导表中填充数据
- python - 根据 Python 中的产品对列表中的元组进行排序
- powerbi - 如何在 Power BI 中绘制折线图
- java - 包装类的探索
- sql - 在 Select 字段中添加插件中安装的 ACF