[英]How to connect a ClojureScript node REPL to my :node-library shadow-cljs project?
語境
我正在使用 ClojureScript 和shadow-cljs構建一個 Node.js 庫。
所有開發都使用 ClojureScript 完成,但構建工件是 NPM package。 例子:
(ns com.example.answer)
(defn answer [] 42)
構建...發布...然后
const answer = require('answer');
answer(); //=> 42
注意:我最近在這篇文章中提供了我的構建設置的詳細信息。
我的整個開發環境都在 Docker 容器中,我正在使用“Visual Studio Code Remote - Container”擴展。
問題”
我的構建設置工作正常(至少我是這么認為的。)但我想實現更快的開發反饋周期。
換句話說:我不想重建整個 NPM package 只是為了測試幾行更改。
完美世界又名“問題”
在一個完美的世界里,我應該能夠打開一個 REPL 並能夠隨時評估我的 ClojureScript 代碼。
無論我如何嘗試到達那里,我似乎都被同樣的潛在問題所阻止:
沒有應用程序連接到 REPL 服務器。 確保您的 JS 環境已加載您編譯的 ClojureScript 代碼。
我試過的
僅使用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.
使用 VS Code卡爾瓦:
給定與上面相同的shadow-cljs.edn
文件:
當我嘗試使用Calva: Load current namespace in REPL window
手動加載命名空間時,我得到了同樣的錯誤:
沒有應用程序連接到 REPL 服務器。 確保您的 JS 環境已加載您編譯的 ClojureScript 代碼。
問題:我如何到達那個完美的世界?
我建議閱讀有關REPL 故障排除的手冊部分。
您很可能想要運行shadow-cljs node-repl
。 這將啟動一個帶有連接的托管運行時的 REPL。 否則,您需要運行 node 來加載:node-library
生成的代碼,如手冊中所述。
如果您願意,可以手動執行此操作,方法是運行node
然后require("./dist/index.js")
。 一旦完成, cljs-repl
將能夠評估。
感謝Thomas Heller,我已經設法讓它發揮作用。
我沒有意識到我需要運行一次構建工件才能連接到 REPL。
這將有效地擺脫這個錯誤:
沒有應用程序連接到 REPL 服務器。 確保您的 JS 環境已加載您編譯的 ClojureScript 代碼。
腳步
Calva: Start a project REPL and connect (aka Jack-in)
node -e "require('./dist')"
Calva: Load current namespace in the REPL window
我在下面附上了一個截屏視頻。 如你看到的:
undefined
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.