如何避免在 Clojure/ClojureScript 项目中重复依赖声明?

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

我一直在使用 Clojure、ClojureScript、lein、shadow-cljs、re-frame、reagent、Emacs 和 CIDER 来开发 Clojure/ClojureScript 动态 Web 应用程序项目。

目前,正在

project.clj
shadow-cljs.edn
deps.edn
上声明依赖关系。

0 - 我想放弃

deps.edn

1 - 我想避免 Boot 并针对

lein

进行优化

2 - 我想避免重复依赖声明理想情况下,我希望将所有依赖项都声明在一个文件中,也许在另一个文件中声明一个指针!如果不可能只在一个文件中声明,请使用两个 - 不带

deps.edn

(i) - 对

project.clj
的依赖性:

  :dependencies
  [[org.clojure/clojure        "1.11.1"]
   [org.clojure/tools.logging  "1.2.4"]
   [org.clojure/clojurescript  "1.11.60"]
   [reagent                    "0.10.0"]
   [re-frame                   "0.12.0"]
   [garden                     "1.3.10"]
   [metosin/malli              "0.8.4"]
   [metasoarous/oz             "1.6.0-alpha35"]

   [hiccup                      "1.0.5"]] ; html parsing and manipulation

(ii) - 对

shadow-cljs.edn
的依赖:

 :dependencies
 [[reagent "1.1.0"]
  [re-frame "1.2.0"]
  [day8.re-frame/tracing "0.6.2"]
  [garden "1.3.10"]
  [metosin/malli "0.8.3"]

  [binaryage/devtools "1.0.3"]
  [day8.re-frame/re-frame-10x "1.1.11"]]

(iii) - 对

deps.edn
的依赖:


{:deps
 {org.clojure/clojure {:mvn/version "1.10.3"},
  reagent {:mvn/version "0.10.0"},
  org.clojure/tools.logging {:mvn/version "1.1.0"},
  org.clojure/clojurescript {:mvn/version "1.10.866"}, 
  ring {:mvn/version "1.9.0"}, 
  garden {:mvn/version "1.3.10"}, 
  metosin/malli {:mvn/version "0.5.1"}, 
  hiccup {:mvn/version "1.0.5"}, 
  metasoarous/oz {:mvn/version "1.6.0-alpha35"}, 
  re-frame {:mvn/version "0.12.0"}}

 :source-paths ["src" "test"]}

你会怎么做?

clojure clojurescript leiningen shadow-cljs deps-edn
1个回答
3
投票

一般来说,我建议将 CLJS 依赖项保留在

shadow-cljs.edn
中,将 CLJ 依赖项保留在
project.clj
中。它避免了一些陷阱和步枪。不过,把所有内容都保留在
project.clj
中就可以了,只是需要小心避免一些错误。

您更改

shadow-cljs.edn
以添加
:lein true
,但完全删除
:dependencies
:source-paths
。然后添加
:dependencies
中尚未存在的所有
project.clj
,并另外添加
thheller/shadow-cljs
(最新版本
"2.20.10"
)。就是这样。

执行此操作时,您必须确保将来不会引入依赖冲突。因此,一个常见的问题是尝试更新

shadow-cljs
但保留旧的
clojurescript
版本,反之亦然。这样做的问题是
shadow-cljs
将继承 CLJ 端的所有 CLJ 依赖项,这在尝试运行 Shadow-cljs 时可能会或可能不会导致冲突/问题。这些都是可以解决的问题,但是你需要解决的问题,因为
shadow-cljs
不再能解决。仅当通过
shadow-cljs.edn
管理依赖项时才可以。

如果需要,您还可以选择将 CLJS 依赖项移至 lein 别名中。然后,您将

shadow-cljs.edn
更改为
:lein {:aliases [:cljs]}
(或您选择的任何别名)。

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