问题标签 [boot-clj]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojurescript - 带有客户端路由的 SPA 的 Clojure 服务器配置
我正在开发一个在客户端路由的 ClojureScript 单页应用程序。我想实现一个简单的服务器,它可以为我的 index.html 和 CSS/JS 提供服务。这个想法是将除 /static/* 之外的所有请求传递到客户端并允许我的 SPA 处理它。
结果出乎意料地困难。下面的片段是我想出来的,但它不起作用。
我将 boot-http 与自定义处理程序一起使用。它有可能导致它吗?
clojure - boot-clj watch build -> 运行 jar - 确定 -> 更改代码 -> 运行 jar - 失败:找不到类
我用命令构建 jar,boot build watch
然后我能够用java -jar target/project.jar
命令成功执行它。源代码更改并重建后,执行失败并显示消息
Caused by: java.io.FileNotFoundException: Could not locate my_dir/foo__init.class or my_dir/foo.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.
我有以下文件结构
build.boot内容:
foo.clj内容:
core.clj内容:
现在我已经boot build watch
运行,当我将core.clj的内容更改为 eg(println "second run")
时,等待重建并运行生成的 project.jar 我得到上面提到的找不到类错误。最后可行的是通过boot build
命令手动重建代码并重新运行,但我想这样做,但boot watch build
我很不明白为什么它不能那样工作。我是新手,所以我可能会遗漏一些明显的东西,但仍然想知道。有任何想法吗?
启动版本
unit-testing - boot-clj:如何为使用 gen-class 生成的类构建/启动单元测试
在我的 clojure 项目中,我使用gen-class命令构建了几个 java 类。他们是[extractor.yaml YAMLExtractor YAMLExtractorFactory]
。我现在想针对这些类构建单元测试,但我有错误:java.lang.ClassNotFoundException: extractor.yaml.YAMLExtractor
当我运行测试时。
导致错误的文件是: yaml_extrator_factory.clj
该错误仅在测试期间发生。整个项目是 AOT 可编译的,没有错误,当我构建一个 jar 文件时也很好。
测试simple.clj包含头:
并测试哪个打印 CLASSPATH。yaml-extractor-factory
没有使用。使用命令运行测试:
boot aot -a update-classpath run-test -t extractor.simple
其中任务update-classpath添加(get-env :directories)
到类路径和run-test运行测试。run-test
与普通的 clojure 代码一起工作正常。
运行测试是我的任务,内容如下:
maven - 预测 boot-clj 构建项目所需的所有依赖项
通常 boot 将所有获取的依赖项存储在本地 maven 存储库中,该存储库位于~/.m2/repository
.
将环境变量设置BOOT_LOCAL_REPO
到另一个目录时,它只会使用选择的那个。
考虑一下:
boot 现在将获取它需要的所有 jar 到本地repo
文件夹。
当第二次调用boot build
时,将没有任何东西可取,并且建筑物会立即启动。
我正在开发一个从引导文件生成 nix 表达式的引导任务。为此,我需要预测引导构建项目所需的所有依赖项。基本上,repo
文件夹的内容。这仅部分有效:在启动任务中使用以下内容时获得的最佳结果:
我会从外部获取那些罐子并将其存储在 repo 文件夹中。然而,当运行 boot build 时,仍然有一些 jars 会被 boot 获取。应该避免这种情况。例如,它发生在那些:
(实际上看起来 boot 只需要 poms 而不是那些文件的 jar)
有人知道如何识别它们吗?
clojure - 为 Clojure/boot 寻求简单的工作流程设置
您如何设置引导以便:(a)所有源文件都在当前目录中,(b)每次源文件更改时运行单元测试,(c)REPL 在包含它们的源文件更改时刷新定义?
具体来说:
什么进去
build.boot
?启动 REPL 的 shell 命令是什么?和/或 REPL 中的什么命令开始监视单元测试?
我还需要做哪些其他常规设置?
我已经阅读了很多关于boot、boot-test、boot-quick-test、REPL reloading in boot和boot-refresh的文档,但是我还没有做很多工作。到目前为止,我发现的文档似乎提供了花絮和提示,但没有提供将这些东西放在一起所需的东西。
一个适当的build.boot
(以及其他任何东西)的简单示例将特别有帮助。
到目前为止,这就是我所拥有的(某种)作品。
在当前目录中加一个文件,sample.clj
:
这会启动以在当前目录中查找源文件,它使我能够sample.clj
通过键入(refresh)
REPL 手动重新加载更改。(boot (test))
用于在.clj
文件中手动运行单元测试,但我刚才尝试时失败了,错误“传递给核心/测试的 args (0) 数量错误”。
这样做的正确方法是什么?
clojurescript - ClojureScript + boot:使非 CLJSJS 库可用于测试代码?
在对 ClojureScript 项目使用引导时,如何使外部非CLJSJS JavaScript 库可用于测试代码(相对于应用程序代码)?
当应用程序代码包含在与库相同的 HTML 页面中时,可以访问它。
(使用leiningen + figwheel,测试代码在与应用程序代码相同的上下文中运行——在我的index.html
页面上——因此测试代码知道第三方 js 库。)
测试代码的引导中是否有类似的页面上下文?conj
或者有没有办法["resources/third-party/library.js"]
进入源或资源路径,以便单元测试可以引用与应用程序代码相同的库?
当我运行boot auto-test
它说#object[ReferenceError ReferenceError: Can't find variable: CodeMirror]
。就我而言, CodeMirror是第三方库。我的单元测试需要一个 CodeMirror 实例,所以他们可以.setValue
,然后调用一堆 CodeMirror 方法来告诉实例要做什么,然后验证实例的新值和光标位置。我正在测试我的 ClojureScript 是否对 CodeMirror 提出了正确的调用以达到预期的效果。
我已经能够使用 CodeMirror 的最新CLJSJS版本,但它没有通过我的单元测试,而直接来自 CodeMirror 的最新非 CLJSJS 版本确实通过了。所以我猜我需要最新的 CodeMirror,它还没有通过 CLJSJS 提供。
这是我build.boot
文件的一部分:
clojure - 如何编写启动脚本来加载 quil/processing 草图?
我已经启动了其他示例,但我尝试将它与 quil/Processing 一起使用。我编写了这个简单的脚本并尝试运行它,但它所做的只是启动一个 Java Applet 窗口,然后立即关闭。没有可供我调试的错误日志。
clojure - 类路径冲突:org.clojure/clojure 版本 1.7.0 已加载,未加载版本 1.8.0
将 build.boot 文件从旧项目复制到新项目时,出现以下错误,在 Google 上一无所获:
类路径冲突:org.clojure/clojure 版本 1.7.0 已加载,未加载版本 1.8.0
clojure - (boot (refresh)) => Can't set!: *e from non-binding thread
我已经安装了samestep/boot-refresh 0.1.0。在启动 REPL中,当我更改源文件并键入:
我得到:
我究竟做错了什么?
这是完整的堆栈跟踪:
堆栈跟踪中没有提到我自己的代码。我以前看过(boot (refresh))
REPL 的工作,但我无法找出我正在做的不同导致此错误的原因。
更新 1
在使用许多打印语句进行长时间的二进制搜索之后——正如@amalloy 的回答中所解释的那样,真正异常的堆栈跟踪是不可访问的——我发现了这一点:
在名为 的命名空间move-test
中,此语句:
导致(boot (refresh))
失败。当我将其替换为:
在ns
声明中,(boot (refresh))
再次工作。这暂时解决了当前的问题,但我仍然想知道发生了什么。
更新 2
继续尝试开始(boot (refresh))
工作,很明显问题每次都不一样。@amalloy 的回答表明,这个问题的真正答案是找到ctnrepl/print-and-return无法存储的异常和堆栈跟踪的某种方式*e
。我尝试了一些想法,但相关变量似乎是私有的,很难挖掘出来。
如何找出导致(boot (refresh))
失败的错误?
clojure - 使用 Hoplon 和 Boot Bulid 工具来获取 Clojure 后端
这是一个非常简单的问题。到目前为止,我整个早上都在晾干以找出问题所在。我决定将 Hoplon 用于我的下一个基于 Clojure 的网站,并且想知道如何使用引导构建工具和 Hoplon 来启动一个新项目以包含后端。下面的代码是如何在 bash 上制作没有后端的模板。
干杯,马特