Frage Wie richte ich eine Clojurescript REPL mit Emacs ein?


Ich versuche eine Umgebung für Clojurescript einzurichten. Das Problem, das ich habe, ist nicht zu wissen, wie ich es einrichten, so dass ich eine Verbindung zu einem Clojurescript Browser REPL von Emacs herstellen kann, so kann ich Formulare direkt aus dem Editor auswerten und es im Browser anzeigen lassen.

Dinge, die ich versucht habe:

Ich habe versucht, Cemericks Piggie-Back zu benutzen und auf nREPL zu piggybacken. Ich weiß nicht wirklich, wie man es aus der Dokumentation konfiguriert. Ich konnte es zum Laufen bringen, nachdem ich herausgefunden hatte, dass ich eine index.html-Datei im Stammverzeichnis des Projektordners erstellen musste. Außer der Server dient nicht meine Vermögenswerte.

Ich habe versucht, inferior-lisp mit dem Bash-Skript aus dem Clojurescript-Wiki einzurichten. Wenn ich jedoch versuche, das Inferior-Lisp-Programm zu starten, bekomme ich "Wrong type argument: stringp, nil".

Hier ist mein idealer Workflow:

Ich habe einen Projektordner / Ressourcen / Öffentlichen Ordner, der meine Assets und HTML-Dateien hat. Ich kann einen Web-Server starten, der diese Dateien irgendwie anbietet, entweder durch Ring oder den einfachen HTTP-Server von Python. Ich könnte eine Verbindung zu einer REPL von Emacs herstellen und Formulare darin auswerten.


24
2017-07-18 03:38


Ursprung


Antworten:


Cemerick zur Rettung: Austin (https://github.com/cemerick/austin) ist genau das, wonach Sie suchen.

Austin bietet Ihnen zwei Optionen: entweder eine REPL, bei der JS in einem Browser ausgewertet wird (eine "Projekt-REPL"), oder eine vollständigere, integrierte, mit einem Browser verbundene REPL. Es klingt, als ob letzteres das ist, wonach Sie suchen, und Sie müssen ein wenig härter für seine Dokumente graben: https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample

Damit die mit dem Browser verbundene REPL funktioniert, ist das Beispiel von Chas ziemlich einfach zu verstehen und läuft auf Folgendes hinaus:

  1. Fügen Sie eine kleine Middleware oder eine Vorlage hinzu, um ein JS-Skriptelement an Ihre HTML-Seite anzuhängen, und dieses Skript muss die Ausgabe von enthalten (cemerick.austin.repls/browser-connected-repl-js)
  2. Starten Sie nREPL, starten Sie Ihren Ring-Server und dann
    (def repl-env (reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env)))
    um eine REPL-Umgebung zu erstellen.
  3. Verwandeln Sie die nREPL-Sitzung von einer Clojure in eine ClojureScript REPL mit
    (cemerick.austin.repls/cljs-repl repl-env)
  4. Verbinden Sie sich über einen Browser mit Ihrer noch laufenden Ring Server-App und Sie sollten verbunden sein.
    (.alert js/window "Hi!") sollte es beweisen.
  5. Die Verwendung der Standard-Emacs-nREPL-Befehle funktioniert wie erwartet, indem ClojureScript in JavaScript kompiliert und zur Auswertung an den Browser gesendet wird.

Der Hauptunterschied zwischen Piggieback und Austin ist der erste und der zweite Schritt: Das Atom wird von der Middleware verwendet, um einen Inline-JavaScript-Block hinzuzufügen, der eine Verbindung zum nREPL herstellt. Da die HTTP-URL zur Laufzeit festgelegt wird, müssen der Ringserver und das clientseitige JavaScript zusammenarbeiten.

FWIW Ich habe eine Funktion in meinem erstellt user Namespace zum schnellen Verbinden der 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)))

20
2017-11-03 19:32



Ich hatte ähnliche Probleme, nachdem ich dem Tutorial gefolgt war https://github.com/clojure/clojurescript/wiki/Quick-Start

Was mir geholfen hat, war der letzte Vorschlag https://groups.google.com/forum/#!topic/clojure/_JWvqc3fENQ

Ersetzen Sie das Meta-Tag in index.html durch

<meta content="text/html;charset=UTF-8" http-equiv="content-type">

2
2017-07-30 19:18