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调用返回的第二个参数中获得了以“/”开头的路径

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秒内未能编译构建测试。
[Figwheel:警告] 编译异常:/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
...