请在2024 Clojure状态调查中分享您的想法!

欢迎!请查看关于页面以了解此工作的更多信息。

+1
ClojureScript

这是一个旧bug,其他人也有报道,我现在又遇到了,这次是在一个deps.edn项目中以及在CI配置中。旧的bug: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之外的开发环境中重建同样的嵌套子目录作为构建目录,并进行git checkout和运行clojure -A:test,就像在Dockerfile中做的那样,这个问题也可能在你自己的开发环境中重现。
by
一位同事又遇到了这个问题。这使得我重新检查上述的复现是否仍然有效。结果确实如此。

[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
...