簡體   English   中英

如何將 ClojureScript 節點 REPL 連接到 my:node-library shadow-cljs 項目?

[英]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 代碼。

我試過的

  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 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 代碼。

腳步

  1. 在 VS Code 中打開任何 ClojureScript 文件
  2. CMD SHIFT p和 select Calva: Start a project REPL and connect (aka Jack-in)
  3. 等到 REPL window 打開
  4. 只有這樣,打開一個新終端並要求您的構建工件,以便連接到 REPL。 例如node -e "require('./dist')"
  5. 在 REPL 中打開要評估的任何 ClojureScript 文件,按CMD SHIFT p和 select Calva: Load current namespace in the REPL window

我在下面附上了一個截屏視頻。 如你看到的:

  • CLJS REPL window 中的命名空間不再設置為undefined
  • 對 ClojureScript 文件的任何更改都會自動重新編譯並在 REPL 中可用

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM