如何延长浏览器与shadow-cljs nREPL的连接时长并恢复REPL变量?
解决方案
1. 延长浏览器连接的闲置超时时间
你可以通过修改shadow-cljs.edn配置调整WebSocket连接的闲置超时时间:
- 在配置文件的
:devtools节点下添加:ws-idle-timeout参数,单位为秒。默认值是300(5分钟),可根据需求设置更大的值,比如1小时(3600秒):
{:devtools {:ws-idle-timeout 3600 ;; 其他devtools配置项 } ;; 其他shadow-cljs配置项 }
修改后重启shadow-cljs服务,新的超时设置即可生效。如果你的环境使用了反向代理(如Nginx),还需要检查代理层是否有独立的超时配置,避免代理提前断开连接。
2. 无需逐个求值恢复REPL变量定义
推荐两种高效方案:
方案一:集中管理REPL临时定义
把常用的REPL变量定义、测试表达式放到专门的开发文件中,比如dev/repl_utils.cljs:
(ns dev.repl-utils (:require [re-frame.core :as rf])) (def sel :some-selection) (def accounts @(rf/subscribe [:the-accounts sel])) ;; 其他常用定义...
浏览器刷新后,只需在REPL中执行以下命令即可一次性加载所有定义:
(load-file "dev/repl_utils.cljs") ;; 或者 (require '[dev.repl-utils :as utils] :reload)
方案二:利用CIDER历史批量执行
CIDER会保留REPL会话的历史记录,你可以:
- 在Emacs中打开REPL历史缓冲区(快捷键
C-c C-h) - 选中所有需要重新执行的表达式
- 执行
C-x C-e(或CIDER的cider-eval-region命令)批量求值
这种方式适合临时的、未整理到文件中的定义,无需提前准备文件。
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

