用途:通过 nREPL 求值 Clojure 代码,用于测试代码、检查已编辑文件是否编译、验证函数行为、调试表达式或加载命名空间。
主要能力:clj-nrepl-eval 针对 nREPL 服务器执行 Clojure 代码,会话状态在多次求值间保持(每个 host:port 各自维护会话文件),因此可在一次求值中 require 命名空间、在后续调用中使用。支持发现并列出当前目录运行的 nREPL 服务器(Clojure、Babashka、shadow-cljs 等)、查看已连接会话、设置超时、重置会话,并会自动修复缺失或不匹配的括号。
使用方式:先运行 clj-nrepl-eval --discover-ports 发现服务器,再选定端口执行代码,例如 clj-nrepl-eval -p <PORT> "(+ 1 2 3)"。推荐用 stdin heredoc(<<'EOF')避免 shell 转义问题。常用命令包括 clj-nrepl-eval --connected-ports、clj-nrepl-eval -p <PORT> "(require '[my.namespace :as ns] :reload)"、clj-nrepl-eval -p <PORT> --timeout 5000 "(long-running-fn)"、clj-nrepl-eval -p <PORT> --reset-session。可用选项:-p/--port(必填)、-H/--host(默认 127.0.0.1)、-t/--timeout(默认 120000 毫秒)、-r/--reset-session、-c/--connected-ports、-d/--discover-ports、-h/--help。命令行参数优先于 stdin。
适用场景:编辑后验证编译、交互测试函数、检查 REPL 当前状态、调试、在提交前确认改动有效。
限制:需已有或自行启动 nREPL 服务器;--reset-session 只重置 nREPL 会话(如清空 *e、*1 等动态变量),不会清除 def 的变量或已加载命名空间;require 时应使用 :reload 以获取最新改动。未提供收费、价格或平台信息。