read eval print loop - How do I setup a Clojurescript REPL with emacs? -
i'm trying setup environment clojurescript. problem i'm having not knowing how set can connect clojurescript browser repl emacs, can evaluate forms right editor , have show in browser.
things i've tried:
i tried using cemerick's piggieback , piggybacking on nrepl. don't know how configure documentation. able work after figuring out had make index.html file in root of project folder. except server doesn't serve assets.
i tried setting inferior-lisp bash script clojurescript wiki. however, whenever try run inferior-lisp-program i'm getting "wrong type argument: stringp, nil".
here's ideal workflow:
i have project folder/resources/public folder has assets , html files. can start web server serves files somehow, either ring or using python's simple http server. i'd able connect repl emacs , evaluate forms it.
cemerick rescue again: austin (https://github.com/cemerick/austin) you're after.
austin gives 2 options: either repl js evaluated in browser (a "project repl"), or more complete, integrated browser-connected repl. sounds latter you're after, , need dig little harder docs: https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample
to browser-connected repl working, chas's example straightforward follow, , boils down to:
- add little middleware or template magic append js script element html page, , script needs contain output of
(cemerick.austin.repls/browser-connected-repl-js)
- start nrepl, start ring server, ,
(def repl-env (reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env)))
create repl environment. - turn nrepl session clojure clojurescript repl with
(cemerick.austin.repls/cljs-repl repl-env)
- connect still-running ring server app browser, , should connected.
(.alert js/window "hi!")
should prove it. - using standard emacs nrepl commands work expected, compiling clojurescript javascript , sending browser evaluation.
the main difference between piggieback , austin first , second steps: atom used middleware add inline javascript block connects nrepl. since http url determined @ runtime, ring server , client-side javascript need work in concert.
fwiw created function in user
namespace speed connecting cljs repl:
(defn cljs-browser-repl "fire browser-connected clojurescript repl" [] (let [repl-env (reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env))] (cemerick.austin.repls/cljs-repl repl-env)))
Comments
Post a Comment