我在 ClojureScript 项目中使用shadow-cljs 。当我做
shadow-cljs watch app
Run Code Online (Sandbox Code Playgroud)
控制台记录错误shadow-cljs - socket connect failed, server process dead?。
我重新启动了计算机,但错误仍然存在
我可以做什么来解决这个问题?
语境
我正在使用 ClojureScript 和shadow-cljs构建一个 Node.js 库。
所有开发都是使用 ClojureScript 完成的,但构建工件是一个 NPM 包。例子:
(ns com.example.answer)
(defn answer [] 42)
Run Code Online (Sandbox Code Playgroud)
构建...发布...然后
const answer = require('answer');
answer(); //=> 42
Run Code Online (Sandbox Code Playgroud)
注意:我最近在这篇文章中贡献了我的构建设置的详细信息。
我的整个开发环境都在一个 Docker 容器中,我使用的是“Visual Studio Code Remote - Container”扩展。
问题”
我的构建设置工作正常(至少我认为是这样!)但我想实现更快的开发反馈周期。
换句话说:我不想为了测试几行更改而重建整个 NPM 包。
完美世界 又名“问题”
在一个完美的世界中,我应该能够打开 REPL 并能够始终评估我的 ClojureScript 代码。
无论我如何尝试到达那里,我似乎都被相同的潜在问题所阻止:
没有应用程序连接到 REPL 服务器。确保您的 JS 环境已加载您编译的 ClojureScript 代码。
我试过的
与shadow-cljs只:
鉴于以下shadow-cljs.edn文件: …
我有一个styles.css文件,我需要从 a 加载它cljs以将它作为 aprops传递给反应库。
节点中的导入是:
import styles from './styles.css'
是否可以在 ClojureScript 中使用shadow-cljs?
我的project.clj有,
:cljsbuild {:builds
{:app
{:source-paths ["src/cljs" "src/cljc"]
:compiler {:output-to "target/cljsbuild/public/js/app.js"
:output-dir "target/cljsbuild/public/js/out"
:main "my.core"
:asset-path "/js/out"
:optimizations :none
:source-map true
:pretty-print true}}}}
Run Code Online (Sandbox Code Playgroud)
我包括app.js在我的list.html, 使用Selmer中,就像这样,
{% block page-scripts %}
{% script "/js/app.js" %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
在我的最后list.cljs,我有
(r/render [list] (.getElementById js/document "content"))
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。
现在,我想要另一个页面,比如说detail.cljs,我也想以类似的方式呈现,
(r/render [detail] (.getElementById js/document "content"))
Run Code Online (Sandbox Code Playgroud)
问题是,我只有一个app.js,并将其包含detail.html在其中也会呈现列表内容。顺便说一句,我想要一个list页面的 url,另一个detail.
问题:
我该怎么办?
当我们保存文件和shadow-cljs重新加载时如何重新渲染整个试剂树?
Web 开发新手在这里。我正在尝试将 NPM react-table 包与 ClojureScript/Reagent 项目一起使用。我无法正确导入包。我所做的:
1/通过NPM安装react-table,在我的项目目录下
2/在我的主命名空间中,我已经包含了 (:require ["react-table" :as rt])
在 REPL 中,我可以看到它正在建立一些连接,因为只要输入rt就会返回#js {:ReactTableDefaults #js {:data #js [], ...
我怎样才能真正创建一个表?我已经尝试过诸如
rt/ReactTable {:data [{:a 1 :b 2} {:a 3 :b 4} {:a 6 :b 8}] :columns [{:Header "a" :accessor "a"} {:Header "b" :accessor "b"}]} 但我一直在打 TypeError: module$node_modules$react_table$lib$index.ReactTable is not a function
我也读过https://code.thheller.com/blog/shadow-cljs/2017/11/10/js-dependencies-in-practice.html但这对我帮助不大。
更新- 使用 figwheel 我到达了某个地方,这就是我想在 shadow-cljs 中重现的内容:
在 project.clj 中: [cljsjs/react-table "6.8.6-0"]
在“视图”命名空间中: (:require [cljsjs.react-table] [reagent.core :as r])
然后这实际上显示了一个表格:
(def ReactTable …Run Code Online (Sandbox Code Playgroud) clojurescript reactjs clojurescript-javascript-interop shadow-cljs
我使用以下命令创建了一个 ClojureScript 项目:
lein new re-frame my-project
然后我使用 Cursive 在 IntelliJ 中打开它。在终端中输入 后lein dev,它会提示我以下消息:
shadow-cljs - HTTP server available at http://localhost:8280
shadow-cljs - server version: 2.8.52 running at http://localhost:9630
shadow-cljs - nREPL server started on port 8777
shadow-cljs - watching build :app
[:app] Configuring build.
[:app] Compiling ...
[:app] Build completed. (203 files, 1 compiled, 0 warnings, 3.65s)
Run Code Online (Sandbox Code Playgroud)
我可以使用将我定向到 REPL 的链接打开服务器,但不能打开连接到浏览器的 nREPL。按照他们的文档,我输入shadow-cljs clj-repl到另一个终端,该终端打开一个 REPL,但没有连接到我的浏览器或项目。如果我输入(js/alert "hi m8")REPL,它会响应:
Syntax error compiling at (REPL:2:1).
No …Run Code Online (Sandbox Code Playgroud) 例如,我有一个该项目的index.html。
我希望每当我构建项目时,它都会自动复制到公共项目中。有没有内置的方法来实现这一点?
shadow-cljs ×8
clojure ×2
reactjs ×2
reagent ×2
clojurescript-javascript-interop ×1
cursive ×1
figwheel ×1
node.js ×1
vscode-calva ×1