我一直在从事 Clojure/ClojureScript 项目,有些东西引起了我的兴趣。
在
shadow-cljs.edn
文件上,有一个声明
依赖关系。正如您可能在下面看到的,其中一些有“全名”
声明,表示为 username/repository-name
。一个例子是
venantius/accountant
。
其他仅声明为
repository-name
,例如[bidi "2.1.5"]
,实际上是由juxt
用户发布的(source)。
我担心这可能会出现问题,因为多个用户可以创建同名的存储库:
{:source-paths ["src" "dev" "test"]
:dependencies [
;; for deploy w lein deps below need to be in project.cljs
;; third-party dependencies
[venantius/accountant "0.2.5"]
[bidi "2.1.5"]
[cljs-hash "0.0.2"]
[clova "0.46.0"]
[com.andrewmcveigh/cljs-time "0.5.2"]
[org.clojure/core.match "1.0.0"]
[binaryage/dirac "RELEASE"]
[com.pupeno/free-form "0.6.0"]
[garden "1.3.10"]
[hickory "0.7.1"]
[metosin/malli "0.8.4"]
[medley "1.4.0"]
[binaryage/oops "0.7.0"]
[djblue/portal "0.16.1"]
[djblue/portal "0.18.0"]
[proto-repl "0.3.1"]
[reagent "1.1.0"]
[re-frame "1.2.0"]
[district0x/re-frame-window-fx "1.1.0"]
[cljsjs/react-beautiful-dnd "12.2.0-2"]
我不确定 Clojure/ClojureScript 项目中的低级别依赖项安装是如何进行的。
仅使用依赖的简短名称是一种不好的做法吗?歧义问题是否可行甚至可能?
直到不久前,还允许将依赖项发布到 https://clojars.org 而无需组名。在这些情况下,该组将变得与工件 ID 相同。所以
bidi
实际上是 bidi/bidi
。
现在,新包只能以特定的组名称发布。但是,旧包可能会继续使用其旧名称。
用于发布的名称也不需要与其 github 存储库坐标相匹配。这些是独立的系统。它们经常匹配,但不要求如此。
回答你的问题:你应该避免多次使用相同的依赖项。您应该使用每个库的官方发布名称。一些库仍然使用旧的标识符进行更新。有些已改用较新的较长名称,而旧名称仍然可用,但不再接收更新。请务必查阅特定库的文档,以确定您应该使用哪一个。他们的自述文件中通常会包含某种信息。
如果通过不同的标识符获取“相同”的库,则可能会发生冲突。当您遇到麻烦时,这些可能很难识别。对于您使用的任何依赖项解析器(例如project.clj、deps.edn、shadow-cljs.edn)都是如此。最佳实践是尽可能保持依赖关系干净。