如何声明对shadow-cljs.edn 文件的 ClojureScript 依赖项有什么区别吗?

问题描述 投票:0回答:1

我一直在从事 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 项目中的低级别依赖项安装是如何进行的。

仅使用依赖的简短名称是一种不好的做法吗?歧义问题是否可行甚至可能?

dependency-management clojurescript shadow-cljs
1个回答
1
投票

直到不久前,还允许将依赖项发布到 https://clojars.org 而无需组名。在这些情况下,该组将变得与工件 ID 相同。所以

bidi
实际上是
bidi/bidi

现在,新包只能以特定的组名称发布。但是,旧包可能会继续使用其旧名称。

用于发布的名称也不需要与其 github 存储库坐标相匹配。这些是独立的系统。它们经常匹配,但不要求如此。

回答你的问题:你应该避免多次使用相同的依赖项。您应该使用每个库的官方发布名称。一些库仍然使用旧的标识符进行更新。有些已改用较新的较长名称,而旧名称仍然可用,但不再接收更新。请务必查阅特定库的文档,以确定您应该使用哪一个。他们的自述文件中通常会包含某种信息。

如果通过不同的标识符获取“相同”的库,则可能会发生冲突。当您遇到麻烦时,这些可能很难识别。对于您使用的任何依赖项解析器(例如project.clj、deps.edn、shadow-cljs.edn)都是如此。最佳实践是尽可能保持依赖关系干净。

© www.soinside.com 2019 - 2024. All rights reserved.