【问题标题】:How to avoid duplication of dependency declaration in a Clojure/ClojureScript project?如何避免在 Clojure/ClojureScript 项目中重复依赖声明?
【发布时间】:2022-12-24 11:36:40
【问题描述】:

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

目前,正在project.cljshadow-cljs.edndeps.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】:

    一般来说,我确实建议将您的 CLJS 依赖项保留在shadow-cljs.edn 中,将您的 CLJ 依赖项保留在project.clj 中。它避免了一些陷阱和脚枪。把所有东西都保存在project.clj中是可以的,只是需要小心避免一些错误。

    您将 shadow-cljs.edn 更改为添加 :lein true,但完全删除 :dependencies:source-paths。然后添加project.clj 中不存在的所有:dependencies,另外添加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]}(或您选择的任何别名)。

    【讨论】:

      猜你喜欢
      • 2022-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2022-12-24
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2014-09-04
      相关资源
      最近更新 更多