Как подключить узел REPL ClojureScript к моему проекту: node-library shadow-cljs? - PullRequest
1 голос
/ 23 сентября 2019

Контекст

Я создаю библиотеку Node.js с ClojureScript и shadow-cljs .
Вся разработка выполняется с использованием ClojureScript, но артефакт сборки является пакетом NPM.Пример:

(ns com.example.answer)

(defn answer [] 42)

build ... release ... then

const answer = require('answer');
answer(); //=> 42

Примечание: я недавно предоставил подробную информацию о моей настройке сборки в этот пост .

Вся моя среда разработки находится в контейнере Docker, и я использую расширение "Visual Studio Code Remote - Container".

«Проблема»

Мои настройки сборки работают нормально (по крайней мере, я так думаютак!) но я бы хотел реализовать более быстрый цикл обратной связи с разработчиками.
Другими словами: я не хочу перестраивать весь пакет NPM только для того, чтобы протестировать несколько строк изменений.

Идеальный мир он же «вопрос»

В идеальном мире я должен иметь возможность открыть REPL и оценить мой код ClojureScript по адресувсе время.

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

Ни одно приложение не подключено к серверу REPL.Убедитесь, что ваша среда JS загрузила скомпилированный код ClojureScript.

То, что я пробовал

  1. Только с shadow-cljs:

    Имеется следующий shadow-cljs.edn файл:

    ;; shadow-cljs configuration
    {:source-paths
    ["src"]
    
    :builds
    {:lib {:target :node-library
            :output-to "dist/index.js"
            :exports {:citation citegen.processor.main/citation}}}}
    

    Первые часы:

    root@97db64e5dfa3:/workspaces/citegen# cd packages/csl-processor/
    root@97db64e5dfa3:/workspaces/citegen/packages/csl-processor# yarn shadow-cljs cljs-repl lib
    yarn run v1.17.3
    $ /workspaces/citegen/node_modules/.bin/shadow-cljs cljs-repl lib
    shadow-cljs - config: /workspaces/citegen/packages/csl-processor/shadow-cljs.edn  cli version: 2.8.52  node: v12.10.0
    shadow-cljs - socket connect failed, server process dead?
    shadow-cljs - updating dependencies
    ...
    shadow-cljs - dependencies updated
    shadow-cljs - server version: 2.8.52 running at http://localhost:9630
    shadow-cljs - nREPL server started on port 36017
    [0:0]~cljs.user=>
    

    Затем в другом терминале: (обратите внимание на сообщение об ошибке)

    root@97db64e5dfa3:/workspaces/citegen# cd packages/csl-processor/
    root@97db64e5dfa3:/workspaces/citegen/packages/csl-processor# yarn shadow-cljs cljs-repl lib
    yarn run v1.17.3
    $ /workspaces/citegen/node_modules/.bin/shadow-cljs cljs-repl lib
    shadow-cljs - config: /workspaces/citegen/packages/csl-processor/shadow-cljs.edn  cli version: 2.8.52  node: v12.10.0
    shadow-cljs - connected to server
    [1:1]~cljs.user=> (inc 41)
    No application has connected to the REPL server. Make sure your JS environment has loaded your compiled ClojureScript code.
    
  2. С кодом VS Кальва :

    С учетом того же файла shadow-cljs.edn, как указано выше:

    enter image description here

    Когда я пытаюсь вручную загрузить пространство имен с помощью Calva: Load current namespace in REPL window, я получаю ту же ошибку:

    Ни одно приложение не подключено к серверу REPL.Убедитесь, что ваша среда JS загрузила ваш скомпилированный код ClojureScript.

Вопрос: Как мне попасть в этот совершенный мир?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Я бы предложил прочитать раздел руководства по Устранение неполадок REPL .

Скорее всего, вы хотите запустить shadow-cljs node-repl.Это запускает REPL с подключенной управляемой средой выполнения.В противном случае вам понадобится какой-нибудь работающий узел для загрузки кода, созданного :node-library, как описано в руководстве.

Вы можете сделать это вручную, если хотите, запустив node и затем require("./dist/index.js").Как только это будет сделано, cljs-repl сможет оценить.

1 голос
/ 23 сентября 2019

Благодаря Томасу Хеллеру мне удалось заставить это работать.

Чего я не понял, так это того, что мне нужно было запустить артефакт сборки один раз, чтобы подключиться к REPL.

Это эффективно избавит от этой ошибки:

Ни одно приложение не подключено к серверу REPL.Убедитесь, что ваша среда JS загрузила скомпилированный код ClojureScript.

Шаги

  1. В VS Code откройте любой файл ClojureScript
  2. Нажмите CMD SHIFT p и выберите Calva: Start a project REPL and connect (aka Jack-in)
  3. Подождите, пока откроется окно REPL
  4. Только после этого откройтеновый терминал и требует ваш артефакт сборки, чтобы установить соединение с REPL.например, node -e "require('./dist')"
  5. Откройте любой файл ClojureScript, который вы хотите оценить в REPL, нажмите CMD SHIFT p и выберите Calva: Load current namespace in the REPL window

Я прикрепил скринкаст ниже.Как вы можете видеть:

  • Пространство имен в окне CLJS REPL больше не установлено на undefined
  • Любое изменение в вашем файле ClojureScript автоматически перекомпилируется и доступно вREPL

enter image description here

...