基于Lein的Clojure/ClojureScript项目如何避免依赖声明重复?
解决方案
第一步:统一依赖版本
先解决多文件中依赖版本不一致的问题,优先选用各依赖的最新稳定版(或你确认要保留的版本),整理出统一的依赖清单:
- 通用依赖(前后端共享):
- org.clojure/clojure: 1.11.1
- org.clojure/tools.logging: 1.2.4
- org.clojure/clojurescript: 1.11.60
- reagent: 1.1.0
- re-frame: 1.2.0
- garden: 1.3.10
- metosin/malli: 0.8.4
- metasoarous/oz: 1.6.0-alpha35
- hiccup: 1.0.5
- ring: 1.9.0(来自原deps.edn)
- 前端专属依赖(仅shadow-cljs使用):
- day8.re-frame/tracing: 0.6.2
- binaryage/devtools: 1.0.3
- day8.re-frame/re-frame-10x: 1.1.11
第二步:更新project.clj
将所有通用依赖写入project.clj的:dependencies,替换原有内容:
:dependencies [[org.clojure/clojure "1.11.1"] [org.clojure/tools.logging "1.2.4"] [org.clojure/clojurescript "1.11.60"] [reagent "1.1.0"] [re-frame "1.2.0"] [garden "1.3.10"] [metosin/malli "0.8.4"] [metasoarous/oz "1.6.0-alpha35"] [hiccup "1.0.5"] [ring "1.9.0"]]
第三步:配置shadow-cljs.edn复用project.clj依赖
修改shadow-cljs.edn,只保留前端专属依赖,同时开启Leiningen集成,让shadow-cljs自动读取project.clj中的依赖,避免重复声明:
;; 启用Leiningen集成,复用project.clj的依赖和classpath :lein true :dependencies [[day8.re-frame/tracing "0.6.2"] [binaryage/devtools "1.0.3"] [day8.re-frame/re-frame-10x "1.1.11"]] ;; 其他原有配置(如:builds、:source-paths等)保持不变
第四步:弃用deps.edn
直接删除项目根目录下的deps.edn文件(或重命名为deps.edn.bak备份),确保项目不再使用该文件。
验证方式
- 运行
lein deps,确认Leiningen能正常拉取所有通用依赖 - 运行
shadow-cljs compile app(或你的build ID),确认shadow-cljs能正常加载project.clj的依赖 + 自身专属依赖,无版本冲突或缺失
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

