clojure - Clojure deps.edn :deps keys mean? 做什么

标签 clojure dependencies

尝试使用 Clojure Deps 和 CLI,我惊讶地发现以下所有内容都适用于使用 clojure.data.json。

Maven 依赖:

{:deps {org.clojure/data.json {:mvn/version "0.2.6"}}}

具有相同 key 的 Git 依赖项:

{:deps {org.clojure/data.json {:git/url "https://github.com/clojure/data.json.git"
                               :sha "13e9d244678be7b235bb24a10310f9d147ea088d"}}}

具有随 secret 钥的 Git 依赖项:

{:deps {lol/this-works {:git/url "https://github.com/clojure/data.json.git"
                        :sha "13e9d244678be7b235bb24a10310f9d147ea088d"}}}

对于 Maven 和 Clojars 依赖项,:deps 键可识别工件。当使用 git sha 代替时,名称似乎并不重要。

  • Clojure deps.edn :deps 键是什么意思?
  • 我应该如何选择我的 :deps 键?

我已阅读但可能包含我想要的资源:

最佳答案

与其他“扩展”(如 maven)相比,这似乎是工具中处理 git“扩展”的结果。所有相关代码可以找到 here 。我还要澄清的是,我还没有深入阅读这段代码,因此我对这段代码的了解并不深。

例如,如果您查看 maven 扩展中处理 lib 的方式,您会发现它实际上是在检查 maven 以查看所提供的名称是否存在该工件,您可以看到不止一处,还包括in the multimethod definition of ext/canonicalize :mvn

在git扩展代码中,lib被给予了不同的处理,你可以看到in the multimethod definition of ext/canonicalize :git

我不想在这里过于深入地猜测,但我猜想,如果这是一个有意的设计决策,它可能与 git 存储库的地址的概念有关。 SoT 用于此类依赖项(即使存储库的地址/名称可能会更改...危险!),而在 Maven 中,名称是注册的一等公民。

并尝试更直接地回答您的两个问题... :deps 键是什么意思?简单的答案是,这取决于它是什么类型的部门!当使用 git 时,它可以是任何东西,例如当使用 Maven 时,它必须引用一个已知的包。我应该如何选择我的 dep key?这有主观的危险,但是,我建议倾向于使用任何背后有可靠的不可变包存储库的 dep,并且仅在需要时才使用像 github 这样的 dep。这是因为 github 依赖项可以更改其地址/名称,或者干脆消失得无影无踪(已删除的存储库)。

关于clojure - Clojure deps.edn :deps keys mean? 做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377746/

相关文章:

clojure - mini-kanren cond-a cond-u 和 cond-e 有什么区别?

ide - 无法在 clojure 中使用 org.joda 时间

python - 如何使用 python 程序获取包的 Yum 依赖项列表。这里的软件包本身是 CentOS 5.5 上可用的一个软件包更新

css - 使用CSS在div上保持纵向纵横比

javascript - 打破 JavaScript 中的依赖关系

clojure - 如何使用 channel 访问 ClojureScript 中按键事件的属性?

Clojure 宏 : resolving vars

mongodb - Clojure - 如何在单元测试中正确挂载状态

android - Android:使用Gradle解决对Artifactory的外部依赖

javascript - 如何在 "traditional website"上使用 node_modules ?