2024年 Clojure 状态调查! 中分享你的想法。

欢迎!请参阅 关于页面 了解这方面的一些更多信息。

+1
ClojureScript

有一个旧的错误,其他人报告说他们也看到了,现在我再次遇到了,这次是在一个 deps.edn 项目和 CI 环境中。旧的错误:https://github.com/emezeske/lein-cljsbuild/issues/490 - 注意其他人报告说更改源目录名称或克隆到不同名称的目录是一种解决方案。

以下是重新运行代码的位置,请参阅 https://github.com/clojure/clojurescript/blob/r1.10.520/src/main/clojure/cljs/closure.clj#L1851,并在其中替换实际值。

cljs.closure=> *lp
"cljsjs/openlayers/development/"
cljs.closure=> *p
"/codebuild/output/src923210442/src/github.com/solita/mnt-teet/app/frontend/target/public/cljs-out/tests/l/events/eventtype.js"
cljs.closure=> (subs *p (+ (inc (.lastIndexOf *p *lp)) (.length *lp)))
"/src/github.com/solita/mnt-teet/app/frontend/target/public/cljs-out/tests/l/events/eventtype.js"

抛出异常的是这里的 (io/file out-dir out-name) 调用
https://github.com/clojure/clojurescript/blob/r1.10.520/src/main/clojure/cljs/closure.clj#L2023

因为 rel-output-path 调用返回的路径以 "/" 开头,作为 out-name 的第二个参数。

openlayers 依赖来自 deps.edn 中的这一行

cljsjs/openlayers {:mvn/version "4.4.1-1"}

1 个答案

0

对此问题是否有对应的 JIRA 门票?如果你已经找到解决方案,我也欢迎补丁。

你好!

非常感谢你的回复!

尚未提交JIRA工单,是由Clojurians中#clojurescript群组的成员推荐我来这里对问题进行分级的,然后如果需要的话,了解情况的人会打开JIRA工单。

我记得我当时并不清楚代码试图在哪个子路径中获取相对部分,以及所使用的路径会有什么重要性,因此并没有修复这个问题。
我已经开始检查这个问题,但上述内容并不是一个完整的重现案例。显然,我们正在向`lib-rel-path`函数传递意外的值,我们需要了解这是如何发生的。你能否在CI之外重现这个问题?谢谢。
又来了,

谢谢您查看这个错误。我为Docker创建了一个可以工作的工作复制,应该不受环境的影响
https://gist.github.com/erno/9abd8e928302503e932a61e5663eeeb5

使用方法:

0. 将上面的gist粘贴到一个名为Dockerfile的文件中

1. docker build -t cljs-bug-repro .

2. docker run -it cljs-bug-repro

3. bash repro.sh

如果你在Docker之外的开发环境中按Dockerfile中所述重新创建相同的嵌套子目录作为构建目录,并执行git checkout和运行clojure -A:test,也可能重现。
一位同事又遇到了这个问题。这促使我再次检查上述重现是否仍然有效。它还起作用

[Figwheel] 在28.338秒内未能编译构建测试。
[图轮警告:编译异常] 编译异常:/src/github.com/solita/mnt-teet/app/frontend/target/public/cljs-out/tests/l/events/eventtype.js 不是一个相对路径  
执行错误(IllegalArgumentException)在 cljs.closure/write-javascript (closure.clj:2031)。
/src/github.com/solita/mnt-teet/app/frontend/target/public/cljs-out/tests/l/events/eventtype.js 不是一个相对路径

完整报告在
/tmp/clojure-594316621683314904.edn
...