请分享您的想法,参与2024 年 Clojure 状态调查!

欢迎!有关该是如何工作的更多信息,请参阅关于页面。

0
ClojureScript
在 1.10.x 中,我在 npm-deps 解析中遇到了回归。对于子依赖项,它无法正确解析模块路径。当我需要如 {{@material/snackbar}} 时,它将失败,错误为 {{未捕获的 Error: 模块 $$material$base$component 名称ToPath 未定义}}。

重复步骤


yarn add "@cljs-oss/module-deps" "@material/snackbar"

cat <<EOF > deps.edn
{:deps {org.clojure/clojurescript {:mvn/version "1.10.145"}}}
EOF

clj -m cljs.main -d out -e "(require '[\"@material/snackbar\"])"


在 1.9.946 中决议正常工作

17 答案

0

评论者:dnolen

这个工单只需要更多信息。在这个报告中的第一步好办法是一个 git bisect。然后需要有人确定这是否是由于 ClojureScript 或 Google Closure 导致的。如果是后者,我们无能为力。

0

评论者:rarous

我甚至能在 1.10.63 上重现这个回归,以缩小窗口。在准备好兼容性回顾和 bisect 后,我将进行。

0

评论者:rarous

通过 bisect 发现它在 #CLJS-2389 (GCC 更新) 中被引入。

0

评论者:rarous

重现代码

0

评论者:rarous

当执行 head -2 out/node_modules/@material/snackbar/index.js并以 {{goog.require("module$$material$base$index");}} 结尾时,就是那个损坏的情况。

0

评论者:dnolen

我已成功重现并且可以看到依赖索引文件 cljs_deps.js 看上去有问题,所以它不工作也是不出奇。

0

评论者:dnolen

进一步挖掘,这可能是一个 Closure 问题,我们将不得不等待上游修复。

0

评论者:dnolen

这是一个 Closure Compiler 问题。我们需要提交一个补丁,并为下一次 Closure 发布进行必要更改,这个更改 https://github.com/swannodette/closure-compiler/commit/58012d3f1068aa588a47dc34ec6f39413aa59e62 修复了我遇到的模块名称问题。

0

评论者:rarous

太好了,谢谢David。

0

评论者:dnolen

PR Closure Compiler https://github.com/google/closure-compiler/pull/2847

0
by

评论者:dnolen

我们能否给这个工单添加一个非平凡的代码表达式,这个表达式应该在 require 之后执行?

0
by

评论者:dnolen

我想到了如何测试这个问题——实际上,通过 master 和我的 Closure Compiler PR,这个问题似乎已经解决了。

0
by

评论者:rarous

对不起,我之前没有回应,因为我昨天的 Code Retreat. 它是一个 DOM 组件,所以需要修改 {{index.html}} 在浏览器 REPL 中运行非平凡的示例。我认为,如果发出的 {{goog.require}} 是正确的,其他一切都将正常工作。非常感谢修复。我希望你的 GCC PR 能尽快被接受。{{1.10}} 看起来非常稳定和快速。

0
by

评论者:dnolen

Closure Compiler PR 现在有了一个测试用例。它可能需要在审查之后进行一些小的调整,但希望这个修复能够在最迟的五月份发布。

0
by

评论者:tkjone

看起来给 google closure 的 PR 已经被审查了 https://github.com/google/closure-compiler/pull/2847

...