2013-07-18 60 views
25

我正在嘗試爲Clojurescript設置一個環境。我遇到的問題是不知道如何設置它,以便我可以從emacs連接到Clojurescript瀏覽器REPL,因此我可以從編輯器中直接評估表單,並將其顯示在瀏覽器中。如何用emacs設置Clojurescript REPL?

事情我已經嘗試:

我試着用Cemerick的piggieback並捎帶上nREPL。我真的不知道如何從文檔中配置它。在弄清楚我必須在項目文件夾的根目錄中創建一個index.html文件後,我才得以開始工作。除了服務器不提供我的資產。

我試着用Clojurescript wiki中的bash腳本設置inferior-lisp。但是,每當我嘗試運行劣等lisp程序時,我都會收到「錯誤的類型參數:stringp,nil」。

這裏是我理想中的工作流程:

我有一個項目文件夾/資源/公衆有我的資產和HTML文件的文件夾。我可以啓動一個Web服務器,以某種方式爲這些文件提供服務,無論是通過環或使用python簡單的http服務器。我可以通過emacs連接到REPL並評估表單。

+1

我建議https://github.com/magomimmo/modern-cljs。它向您展示瞭如何實現您理想的工作流程,甚至包括用於服務您的公共資產的Python單線程。輕鬆獲得最好的cljs資源之一。 – danneu

回答

20

Cemerick更換元標記的教程後,再次拯救:奧斯汀(https://github.com/cemerick/austin)正是你所追求的。

Austin提供了兩種選擇:在瀏覽器中評估JS的REPL(「項目REPL」)或更完整的集成瀏覽器連接REPL。聽起來好像後者就是你想要的,你需要爲它的文檔挖掘一點點:https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample

爲了讓瀏覽器連接的REPL能夠工作,查斯的例子非常簡單,可以歸結爲:

  1. 加少許中間件或模板魔法JS腳本元素追加到HTML頁面,該腳本需要包含的(cemerick.austin.repls/browser-connected-repl-js)
  2. 啓動nREPL輸出,啓動你的戒指服務器,然後
    (def repl-env (reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env)))
    創建一個REPL環境。
  3. 從Clojure的轉動nREPL會話到ClojureScript REPL與
    (cemerick.austin.repls/cljs-repl repl-env)
  4. 連接到您的仍在運行的環服務器應用程序與瀏覽器,你應該連接。
    (.alert js/window "Hi!")應該證明它。
  5. 使用標準Emacs nREPL命令將按預期工作,將ClojureScript編譯爲JavaScript併發送給瀏覽器進行評估。

Piggieback和Austin之間的主要區別在於第一步和第二步:原子被中間件用於添加一個連接到nREPL的內嵌JavaScript塊。由於HTTP URL是在運行時確定的,因此Ring服務器和客戶端JavaScript需要協同工作。

FWIW我在user命名空間中創建一個函數來加快連接CLJS REPL:

(defn cljs-browser-repl 
    "Fire up a 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)))