macOS Monterey 12.5安装Dirac遇clojure/data/json缺失错误求助
Dirac安装运行问题排查
环境与安装过程
我在搭载M1芯片、运行macOS Monterey 12.5的MacBook Air上,尝试安装Dirac(Chrome DevTools的ClojureScript分支),执行官方提供的安装命令:
curl -s https://raw.githubusercontent.com/binaryage/dirac/master/install > /tmp/dirac.install && sudo bash /tmp/dirac.install
安装完成后,/usr/local/bin目录下存在dirac二进制文件,但运行dirac命令时出现错误:
Pedros-MacBook-Air:bin pedro$ dirac WARNING: update-vals already refers to: #'clojure.core/update-vals in namespace: clojure.tools.analyzer.utils, being replaced by: #'clojure.tools.analyzer.utils/update-vals ...(省略警告信息) Execution error (FileNotFoundException) at dirac.nrepl.compilation.direct/eval15283$loading (direct.clj:1). Could not locate clojure/data/json__init.class, clojure/data/json.clj or clojure/data/json.cljc on classpath.
我先在Home目录尝试运行,问题未解决;随后在已添加org.clojure/data.json依赖的项目目录(project.clj简化内容如下)运行,仍报错:
(defproject abcd ; Should be copied from shadow-cljs.edn :description "xxxx" :url "xxxx" :dependencies [[org.clojure/clojure "1.9.0"] [org.clojure/clojurescript "1.10.339"] [org.clojure/tools.nrepl "RELEASE"] [binaryage/devtools ~devtools-version] [binaryage/dirac ~dirac-version] [org.clojure/data.json "2.4.0"] [figwheel ~figwheel-version] ;; Selmer for templating of .json config files [selmer "1.12.50"]] ... (省略无关内容) ... :profiles {:repl {:repl-options {:port 8230 :nrepl-middleware [dirac.nrepl/middleware] :init (do (require 'dirac.agent) (dirac.agent/boot!)) }}})
疑问
- Dirac是否必须在项目目录中运行?
- 为何已添加
org.clojure/data.json依赖仍报错,该依赖与报错中的clojure/data/json.clj有何区别?
解答
问题1:Dirac是否必须在项目目录中运行?
不是必须,但全局直接运行dirac命令时,它会使用自身内置的依赖环境,而非本地项目的依赖配置。通常更推荐在项目目录内结合Leiningen或Clojure CLI启动Dirac,这样它能复用项目的依赖,避免依赖缺失问题。如果要全局运行,需要确保Dirac的全局安装包包含所有必要依赖,但官方一键安装可能在M1芯片环境下存在依赖打包不全的情况。
问题2:org.clojure/data.json依赖与报错中clojure/data/json.clj的关系及报错原因
- 两者的关系:
org.clojure/data.json就是提供clojure/data/json.clj的官方依赖包,报错里的路径正是这个依赖包中的核心文件。 - 报错原因:
- 全局安装的Dirac未包含该依赖:通过一键脚本安装的全局
dirac二进制文件,其内置的classpath里缺少org.clojure/data.json,所以运行时找不到对应文件。 - 项目目录运行时未加载项目依赖:在项目目录运行全局
dirac命令时,它并不会自动读取项目project.clj的依赖配置,依然使用自身全局环境。正确做法是通过Leiningen命令启动,比如lein dirac repl,这样才会将项目依赖加载到classpath中。
- 全局安装的Dirac未包含该依赖:通过一键脚本安装的全局
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

