如何通过Calva Jack-in启动ClojureScript项目的前后端?
解决Calva Jack-in启动前后端的正确流程
1. 确认shadow-cljs构建配置
确保你的shadow-cljs.edn中backend构建配置正确,需包含Node脚本目标和REPL支持,示例:
{:deps true :builds {:frontend {:target :browser :modules {:main {:init-fn mern.frontend.core/init}}} :backend {:target :node-script :output-to "target/main.js" :main mern.backend.core/main :devtools {:repl-true}}}}
2. 启动Calva Jack-in时选择正确构建目标
- 打开项目后,执行Calva的Jack-in命令(默认快捷键
Ctrl+Alt+C J)。 - 在shadow-cljs构建选择步骤中,勾选backend(需同时启动前端可一并勾选frontend)。
- 等待REPL启动完成,终端会显示已连接到shadow-cljs的backend REPL。
3. 在REPL中切换到backend命名空间并启动服务
- 在REPL输入框执行命令切换命名空间:
也可使用Calva的Switch to Namespace命令((in-ns 'mern.backend.core)Ctrl+Alt+C N)选择mern.backend.core。 - 验证当前REPL环境:执行
(js/process.version),应返回Node.js版本号(如v18.17.0),确认是Node环境而非浏览器环境。 - 执行启动函数:
此时终端会输出(start!)Starting server和Example app listening on port 3000!,访问localhost:3000即可看到预期的"Hello, world"。
4. 启动前端(若需)
- 若启动Jack-in时勾选了frontend构建,Calva会自动启动shadow-cljs的watch模式,前端代码将自动编译刷新。
- 前端初始化函数(如
mern.frontend.core/init)可在frontend的REPL中执行,或根据构建配置让shadow-cljs自动调用。
常见问题排查
- 执行
start!无输出:检查是否处于正确的backend REPL环境,前端REPL无法加载express模块,会直接报错(若无报错则大概率未切换到backend)。 - 端口被占用:修改代码中
port变量为其他值(如3001),重新执行(start!)。 stop!报错:检查@server是否为nil,确保start!已成功执行。
内容的提问来源于stack exchange,提问作者madeinQuant
相关产品推荐
相关产品推荐

