开始使用ClojureScript浏览器REPL

3
我正在尝试在浏览器中启动ClojureScript REPL。理想情况下,我不想使用Austin:我首先想让最简单的REPL起作用。
我尝试按照各种教程操作,但到目前为止,我无法使其正常工作。基本上,我不明白人们说“启动ClojureScript浏览器REPL”时是什么意思。
到目前为止,我已经做了以下几点:
lein new mies hellow

并且:

lein cljsbuild auto hellow

这是我的core.js文件:

(ns hellow.core
  (:require [clojure.browser.repl :as repl]))

(enable-console-print!)

(println "Hello world!")    
(. js/console (log "Hello again"))    
(repl/connect "http://localhost:9000/repl")    
(. js/console (log "Ah, this prints too"))

当我打开我的index.html文件(调用core.js),在Chrome的开发者工具的JavaScript控制台中,可以看到一切都被正确记录。
然而,(repl/connect ...)显然失败了。以下是Chrome开发者工具显示的内容;
Failed to load resource http://localhost:9000/repl?xpc=%7B%22cn%22%...

在几乎每篇关于ClojureScript的论坛帖子/博客文章/教程中,我都会看到这样一句话:"启动浏览器REPL"或类似的语句。

我如何启动浏览器REPL?这是不是必须在从浏览器加载index.html之前完成的任务?

我可以从Emacs中启动此浏览器REPL吗?

在不加载index.html / core.js的情况下,我如何测试浏览器REPL是否正常工作?

index.html / core.js加载到浏览器后,我如何验证core.js内的(repl/connect ...)确实起作用并已连接到REPL?


试试使用Figwheel和Chestnut,它们会让启动浏览器REPL变得非常容易。 - zach
1个回答

6

开始使用repl服务器(已经包含客户端代码)的最简单和基本的方法是执行以下操作:

$ lein trampoline cljsbuild repl-listen
Running ClojureScript REPL, listening on port 9000.
To quit, type: :cljs/quit
ClojureScript:cljs.user>

在那时,如果您尝试评估任何表达式,例如 (+ 1 2),您将会发现repl挂起,因为它没有环境来进行评估。
这时,您需要前往index.html(请记得从Web服务器提供服务,否则连接将失败,不要使用file:/// URL),并在浏览器中打开它。
http://localhost:9000/repl?xpc=... 的连接应该可以正常工作,repl应该解除阻塞并打印3。从那时起,任何命令都将在浏览器环境中执行。
我喜欢尝试(js/alert "hi"),看看repl是否连接,如果它成功了,它将在浏览器窗口中alert hi。
请记住,浏览器窗口是您的执行环境,因此如果您刷新它,您将失去运行时值,并且如果您不重新定义它们,则无法从repl访问它们。
使用cljsbuild也有:(lein cljsbuild help)
repl-listen
  Run a REPL that will listen for incoming connections. (the one I used above)
repl-launch
  Run a REPL and launch a custom command to connect to it.
repl-rhino
  Run a Rhino-based REPL (JVM based JS execution environment, no browser needed).

此外,对于基本的 repl,使用 rlwrap 可以很有用,因为它可以获得 readline 快捷键(Ctrl + a等)和 repl 历史记录等功能。
$ rlwrap lein trampoline cljsbuild repl-listen

我希望这些内容能对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接