Как настроить ClojureScript REPL с emacs?

Я пытаюсь настроить среду для Clojurescript. Проблема в том, что я не знаю, как настроить его, чтобы я мог подключиться к ClojureScript Browser REPL из emacs, поэтому я могу оценивать формы прямо из редактора и отображать их в браузере.

вещи, которые я пробовал:

Я попытался использовать cemerick's piggieback и piggybacking на nREPL. Я не знаю, как настроить его из документации. Я смог заставить его работать после выяснения Мне нужно было составить список.HTML-файл в корневой папке проекта. Только сервер не обслуживает мои активы.

Я попытался настроить inferior-lisp с помощью скрипта bash из ClojureScript wiki. Однако всякий раз, когда я пытаюсь запустить программу inferior-lisp, я получаю "неправильный аргумент типа: stringp, nil".

вот мой идеальный рабочий процесс:

У меня есть папка проекта/ресурсы/общая папка, в которой есть мои активы и html-файлы. Я могу запустить веб-сервер, который обслуживает эти файлы каким-то образом, либо по кольцу, либо с помощью простого http-сервера python. Я мог бы подключиться к REPL из emacs и оценить формы в нем.

3 ответов


Джемерик снова спешит на помощь: Остин (https://github.com/cemerick/austin) это именно то, что вам нужно.

Austin дает вам два варианта: либо REPL, где JS оценивается в браузере ("project REPL"), либо более полный, интегрированный браузер-подключенный REPL. Похоже, что последнее-это то, что вам нужно, и вам нужно копать немного сложнее для своих документов: https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample

чтобы заставить браузер-подключенный REPL работать, пример Chas довольно прост, чтобы следовать, и сводится к:

  1. добавьте немного middleware или template magic, чтобы добавить элемент сценария 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. превратите сеанс nREPL из Clojure в ClojureScript REPL с
    (cemerick.austin.repls/cljs-repl repl-env)
  4. подключитесь к все еще работающему приложению Ring server с помощью браузера, и вы должны быть подключены.
    (.alert js/window "Hi!") должны доказать это.
  5. использование стандартных команд Emacs nREPL будет работать, как ожидалось, компиляция ClojureScript в JavaScript и отправка его в браузер для оценка.

основное различие между Piggieback и Austin - это первый и второй шаги: atom используется промежуточным программным обеспечением для добавления встроенного блока JavaScript, который подключается обратно к nREPL. Поскольку URL HTTP определяется во время выполнения, Кольцевой сервер и клиентский 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)))

У меня были аналогичные проблемы после выполнения учебника поhttps://github.com/clojure/clojurescript/wiki/Quick-Start

что помогло мне было последнее предложение на https://groups.google.com/forum#!тема/clojure / _JWvqc3fENQ

замена мета-тега в индексе.HTML с помощью

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

С главная Figwheel, настройка live-перезагрузки, подключенного к браузеру REPL стала намного проще. Figwheel.main компилирует ваш источник Clojurescript по мере его изменения и позволяет оценивать код в браузере.

  1. определите свои зависимости в deps.edn. :paths указывает папки для поиска исходного кода.

    {:deps {org.clojure/clojure {:mvn/version "1.9.0"}
            org.clojure/clojurescript {:mvn/version "1.10.339"}
            com.bhauman/figwheel-main {:mvn/version "0.1.9"}}
     :paths ["src"]}
    
  2. определите точку входа приложения в dev.cljs.edn. Здесь" dev " становится сборкой имя.

    {:main example.core}
    
  3. создайте код ClojureScript в src/example/core.cljs.

    (ns example.core)
    
    (let [msg "Change msg in src/example/core.cljs and see what happens!"]
      (js/alert msg))
    
  4. запустите REPL.

    • использовать Emacs:
      1. выполнить M-x cider-jack-in-clojurescript
      2. выберите figwheel-main в качестве цели сборки
      3. Set :dev в качестве имени сборки.
    • С терминала:
      1. выполнить clojure -m figwheel.main -b dev -r. -b dev устанавливает сборку и -r запускает REPL на нагрузка.

для получения дополнительной информации, обратитесь к разделу хорошо сделанная документация Figwheel.