为何CIDER的REPL有时启动为shadow.user>,有时为cljs.user>?
为什么启动shadow-cljs REPL时会在shadow.user和cljs.user之间切换?
你遇到的差异本质是REPL运行环境的不同,这两个命名空间分别对应shadow-cljs的两个核心REPL层级:
1. 两个命名空间的核心区别
- shadow.user:这是运行在JVM上的Clojure命名空间,属于shadow-cljs的控制层面。在这里你能执行shadow-cljs的管理命令,比如启动/停止构建、查看构建状态、调整编译配置,但没法直接运行你的ClojureScript应用代码。
- cljs.user:这是运行在ClojureScript runtime(比如浏览器、Node.js)里的命名空间,属于应用层面。在这里你可以直接编写、测试你的CLJS应用代码,和你的web应用处于同一个执行环境。
2. 出现差异的原因
当你用cider-jack-in-cljs选择shadow-cljs和shadow类型的REPL时,CIDER的启动逻辑有两种分支:
- 如果CIDER能自动识别并连接到你指定的
:app构建,会直接帮你切换到CLJS runtime的REPL,此时就会进入cljs.user; - 如果启动过程中出现缓存残留、配置未明确指定默认构建,或者CIDER没有自动完成切换步骤,就会停留在shadow-cljs的控制REPL,也就是
shadow.user。
3. 如何确保每次都进入cljs.user
- 检查CIDER配置:在Emacs里设置
(setq cider-shadow-cljs-default-options '(:builds :app)),让CIDER默认自动切换到:app构建; - 启动时确认选择:在CIDER的交互提示里,确保完整选择到
:app构建,不要中途跳过; - 手动切换补救:如果不小心进入了
shadow.user,执行命令(shadow/repl :app)就能立即切换到cljs.user的CLJS REPL环境。
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

