嗨那里!感谢你询问这个问题。Calva 中的这些项目类型命名有点令人困惑,即使我不知道如何 else 来命名它们。使用哪种项目类型取决于项目的配置方式。
shadow-cljs 项目可以配置为用 shadow-cljs 或 deps.edn 启动。最常用的方案是其中之一。这不仅仅与 Calva 有关,更多的是关于项目应该如何启动。Calva 中的项目类型是配置 + 一些启动项目的代码。
shadow-cljs 项目类型使用类似于以下命令行启动开发 REPL:
npx shadow-cljs watch -d cider/cider-nrepl:0.27.4 <build-id-1> [<build-id-2> ...]
你就是这样配置你的项目以启动的,所以这是为什么它能工作。
deps.edn + shadow-cljs 项目类型使用类似于以下命令行启动 REPL:
clojure -Sdeps '{:deps {nrepl/nrepl {:mvn/version,"0.9.0"},cider/cider-nrepl {:mvn/version,"0.27.4"}}}' -M<alias-1>[<alias-2>...] -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]"
我现在记不起在 deps.edn
中需要什么以使其工作,但无论如何,那里需要有支持该功能的内容。(一些 :main
配置来启动 shadow-cljs 监视器。)你的项目没有为此而配置,这就是为什么该方案无法工作。(Calva 的错误处理不够好,因此你无法获得关于错误的正确信息。)
在这两种情况下,一旦 Clojure REPL 启动,Calva 将
- 连接到该 REPL。
- 克隆 nREPL(用于 REPL 连接的协议)会话。这是 Calva 的
clj
会话,将在 .clj
文件中使用,以及当 Calva 配置为执行此操作时,在 .cljc
文件中使用。(这是一个可切换的功能,您可以通过状态栏访问它。)
- 再克隆一次 nREPL 会话。这将是一个用于
.cljs
文件和根据那个切换选项使用 .cljc
文件的 Calva cljs
会话。
- “提升”
cljs
会话到 ClojureScript REPL。Calva 使用 shadow-cljs 开发 API 来实现此功能。只需使用终端执行此操作时会在 REPL 提示符中使用的相同命令。
- 选择要监视的构建之一。再次使用 shadow-cljs 开发 API。
注意,除了 Calva 之外,您可以在手动执行这些步骤,我建议您这样做,这样就可以搞清楚 Calva 在“Jack-in”并连接时做什么。但连接 Calva 时,最好让 Calva 来做,因为这样 Calva 就可以更新它的一些状态,以便界面反映哪个 REPL 正在被使用等。
我希望这解答了 在 Calva 中何时选择哪种项目类型 的疑问。
您实际上是在问 何时使用一个或另一个项目设置。我将让其他人回答这个问题,因为这不属于我的专业领域。但是,我可以说我更喜欢尝试使用 shadow-cljs 来启动开发 REPL。我认为这通常有效。