CIDER REPL行为异常?如何解决shadow-cljs"No available JS runtime"错误?
问题原因分析
出现"No available JS runtime"错误,本质是ClojureScript REPL无法找到并连接到浏览器端的JS执行环境,常见原因包括:
- shadow-cljs的devtools与浏览器runtime的连接异常断开,且自动重连机制失效
- 浏览器插件(广告拦截、隐私工具)拦截了shadow-cljs注入的dev脚本,导致runtime无法注册
- shadow-cljs配置文件(
shadow-cljs.edn)被误修改,导致devtools无法正确暴露runtime - CIDER与shadow-cljs的REPL桥接会话损坏,无法传递代码到浏览器runtime
修复方法
- 重置shadow-cljs连接:
在终端执行:
或者在CIDER REPL中执行:shadow-cljs disconnect shadow-cljs watch app
等待构建完成后重新打开页面。(shadow.cljs.devtools.api/disconnect) (shadow.cljs.devtools.api/watch :app) - 排除浏览器拦截:
关闭广告拦截、隐私类插件,或使用浏览器无痕模式访问http://localhost:3005/,确认shadow-cljs的dev脚本能正常加载。 - 验证shadow-cljs配置:
检查shadow-cljs.edn中:devtools节点的配置,确保:http-port为3005,:watch-dir指向正确的源码目录,没有误改导致runtime无法被检测到。 - 重建CIDER连接:
在Emacs中关闭当前CIDER缓冲区,重新执行cider-jack-in-cljs,选择对应的shadow-cljs构建目标(如:app),等待REPL初始化完成后再打开页面。 - 清除浏览器缓存:
清除localhost:3005站点的本地存储和缓存,避免旧的shadow-cljs脚本残留导致连接异常。
调试建议
- 查看shadow-cljs日志:
在终端执行shadow-cljs log app,观察是否有runtime注册失败、连接超时等错误信息,定位问题环节。 - 检查浏览器控制台:
打开页面后查看浏览器开发者工具的控制台,确认是否有shadow-cljs相关的报错(如shadow$bridge未定义、脚本加载失败)。 - 测试独立shadow-cljs REPL:
跳过CIDER,直接在终端执行shadow-cljs cljs-repl app,输入(+ 1 2 3)测试。如果能正常执行,说明问题出在CIDER与shadow-cljs的集成上;否则问题在shadow-cljs或浏览器环境。 - 检查依赖兼容性:
确认project.clj中shadow-cljs、CIDER相关依赖版本匹配,避免因版本冲突导致REPL桥接失败。
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

